C++基础(六)一个Class

本文详细解析了C++类中的构造函数,包括默认构造函数、带参数构造函数、拷贝构造函数以及赋值运算符重载。通过具体代码实例,展示了构造函数的初始化顺序与书写顺序无关的特点,以及如何正确实现拷贝构造函数和赋值运算符以避免资源泄露和数据不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Student
{
public:
	Student():m_Age(0)   //这里要注意初始化顺序与书写顺序无关,只与声明顺序有关
	{
		memset(m_Name,0,sizeof(m_Name));
	}
	Student(int nAge,char *pName) //一旦定义了这个构造函数,则编译器不会再为你生成其他的构造函数,包括无参的
	{
		m_Age=nAge;
		if (pName!=NULL)
		{
			if (strlen(pName)<20)
			{
				strcpy(m_Name,pName);
			}
			else
			{
				memset(m_Name,0,sizeof(m_Name));
			}
		}
		else
		{
			memset(m_Name,0,sizeof(m_Name));
		}
	};
	~Student(){};
	Student(const Student &Stu)//这里必须是引用,而且必须是const,如果不是const 你就不能以一个const对象为模板去复制,同时也是为了安全
		//如果拷贝构造函数中的参数不是一个引用,
		//即形如CClass(const CClass c_class),
		//那么就相当于采用了传值的方式(pass-by-value),
		//而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。
		//因此拷贝构造函数的参数必须是一个引用。
		//需要澄清的是,传指针其实也是传值,如果上面的拷贝构造函数写成CClass(const CClass* c_class),也是不行的。
		//事实上,只有传引用不是传值外,其他所有的传递方式都是传值。
	{
		m_Age=Stu.m_Age;
		strcpy(m_Name,Stu.m_Name);
	}

	Student & operator=(const Student & stu) //注意返回值是引用,这是拷贝赋值函数,而且参数应该是const的,因为如果不是const,你就不能往里传一个const对象   c++中凡是传引用参数的都要使用const
	{			
		strcpy(m_Name,stu.m_Name);
		m_Age=stu.m_Age;
		return *this; //return *this,谁调用返回谁
	}
	void print()
	{
		cout<<m_Age<<endl;
		cout<<m_Name<<endl;
	};

	int m_Age;
	char m_Name[20];
};

<think>嗯,用户问的是在C++class是不是一个类。首先,我需要确认自己对C++的理解是否正确。在C++中,确实有class关键字用来定义类。那用户的问题可能是在确认class关键字的作用,或者对类和class的关系有疑问。 接下来,我应该考虑用户可能的背景。可能用户刚开始学习C++,对基本概念还不熟悉,所以需要简明扼要的解释。也有可能用户之前学过其他编程语言,比如Java或Python,那里的类可能有不同的定义方式,所以需要对比说明。 然后,我要回想C++class和struct的区别。因为struct在C++中也可以有成员函数、访问控制等,但默认的访问权限是public,而class默认是private。这一点可能需要提到,但用户的问题可能不需要深入到这里,除非他们进一步询问。 还需要解释类的组成部分,比如成员变量和成员函数,以及访问控制的作用。比如,public、private、protected这些关键字如何影响成员的访问权限。不过用户的问题可能只需要基础层面的回答,所以是否要详细说明这些部分呢? 另外,用户可能混淆了“类”这个中文术语和class这个关键字,想确认是否class就是用来声明类的。这时候需要明确回答:是的,class是用于定义类的关键字,然后给出一个简单的例子,说明如何用class来创建一个类,并实例化对象。 可能还要考虑用户是否有其他隐藏的问题,比如类和对象的关系,或者如何在C++中使用类。但根据当前的问题,可能不需要展开,但可以稍微提及,以帮助用户建立完整的理解。 例如,可以说明类是一种用户自定义的数据类型,而对象是该类型的实例。然后通过代码示例展示类的定义和对象的创建过程。这样用户能更直观地理解class的作用。 此外,可能需要提醒用户注意class和struct的区别,尤其是在默认访问权限上的不同。虽然用户没有直接问这个问题,但了解这一点有助于他们正确使用class来封装数据。 总结来说,回答需要明确肯定class就是用来定义类的,解释类的基本结构,访问控制,给出例子,并简要对比struct。这样既回答了用户的问题,又覆盖了相关的知识点,帮助用户巩固理解。</think>是的,在C++中,`class` 是用于定义**类(Class)**的关键字。类是C++面向对象编程(OOP)的核心概念,它允许你将数据(成员变量)和操作这些数据的方法(成员函数)封装在一个逻辑单元中。 --- ### **类的基本结构**: ```cpp class MyClass { // 使用 class 关键字定义类 private: // 访问控制:私有成员(默认) int data; // 成员变量 public: // 访问控制:公有成员 void setData(int value) { // 成员函数 data = value; } int getData() { return data; } }; ``` --- ### **关键点**: 1. **封装**: - 类通过 `public`、`private`、`protected` 控制成员的访问权限。 - `private` 成员只能在类内部访问(默认),`public` 成员可以被外部访问。 2. **对象(实例)**: - 类是“蓝图”,通过实例化(`MyClass obj;`)创建具体的对象。 3. **与 `struct` 的区别**: - C++中 `struct` 也可以定义类,但默认访问权限为 `public`,而 `class` 默认是 `private`。 --- ### **示例:类的使用** ```cpp int main() { MyClass obj; // 创建类的对象 obj.setData(42); // 调用公有方法 cout << obj.getData(); // 输出 42 // obj.data = 10; // 错误:data 是 private 成员 return 0; } ``` --- ### **总结**: `class` 是C++中定义类的关键字,用于实现封装、继承和多态等面向对象特性。它通过访问控制实现了数据隐藏,是构建复杂程序的基础结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值