类的6个默认成员函数
成都创新互联公司主营梅列网站建设的网络公司,主营网站建设方案,手机APP定制开发,梅列h5成都小程序开发搭建,梅列网站营销推广欢迎梅列等地区企业咨询构造函数:
拷贝构造函数:
赋值操作符重载:
析构函数:
取地址操作符重载:
const取地址操作符重载:
重写的常见形式:
class class_name{
public:
class_name() {} //无参默认构造函数
class_name(int a=1,int b=1,int c=1) //有参构造函数(当参数都有缺省值时,
{ // 也称为默认构造函数)
m_a=a
m_b=b;
m_c=c
}
// 构造函数重载
class_name(int a,int b,int c){ //有参构造函数(给成员数据赋值)
m_a=a;
m_b=b;
m_c=c
}
class_name(int a,int b,int c): //有参构造函数(使用参数列表初始化成员数据)
m_a=a,
m_b=b,
m_c=c
{}
}
private:
int m_a;
int m_b;
int m_c;
}
功能:主要完成初始化工作。
特征:
1、与类名相同;
2、无返回值;
3、实例化对象时,会被自动调用
4、可重载
注意:
1、调用无参构造函数时,切记不要带();
2、构造函数的参数都有缺省值时,称为默认构造函数;
3、当重写构造函数时,默认构造函数同一时刻只能存在一个;
拷贝构造函数:功能:使用同类对象初始化创建对象
重写的常见形式:
class class_name{
public:
class_name(const class_name &d) //const保护对象d不被修改
{
m_a=d.n_a; //值拷贝(浅拷贝)
m_b=d.n_b;
m_c=d.n_c;
}
private:
int m_a;
int m_b;
int m_c;
}
特征:
1、是构造函数的一个重载形式;
2、参数只有一个且必须使用引用调用,使用传值方式会引发无穷递归;
3、若未显示定义,系统会默认生成。
注意:
1、必须要是以引用的方式进行传参,否则会导致无限递归;
2、以对象初始化对象时,都会调用拷贝构造函数,如下为三种常见的举例;
class_name t1=t;
class_name fun(class_name x) //当使用fun函数时,x会被拷贝构造
return tmp; //在函数返回时(tmp为临时对象)
3、默认拷贝函数按照成员数据拷贝,值拷贝(浅拷贝)。
赋值操作符重载:功能:主要是把一个对象赋值给另一个对象。
重写的常见形式:
class class_name{
public:
class_name & operator=(const class_name & t)
{
if(this!=&t) //判断是不是自己给自己赋值
{
m_a=t.m_a; //浅赋值
}
return *this;
}
private:
int m_a;
}
注意:
1、引用返回:提高效率,少一次拷贝构造;
2、有返回值:为了实现连续赋值;
3、参数引用:提高效率,少一次拷贝构造;
4、参数设置为常:保护=右边的对象不会被修改,安全性。
析构函数:功能:主要完成清理工作。
常见形式:
~class_name()
{}
特征:
1、函数名是在类名前加~;
2、无参数、无返回值;
3、一个类有且只有一个析构函数,若未显式定义,则系统自动生成默认析构函数;
4、对象生命周期结束时,C++编译系统会自动调用析构函数。
注意:
1、对象的析构,按照构造的相反顺序,(栈储存)。
取地址操作符重载: const取地址操作符重载:这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,如想让别人获取到指定的内容。
补充:
当类中含有指针变量,则一定要重写,前四大默认函数,拷贝构造函数与赋值符号的重载,且为深拷贝与深赋值。
围绕指针类型
1、常对象不能调用普通方法;
2、普通对象可以调用常方法;
3、常方法不能调用普通方法;
4、普通方法可以调用常方法;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧