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];
};
C++基础(六)一个Class
最新推荐文章于 2024-06-25 08:39:02 发布