条款05:了解C++默默编写并调用哪些函数

目录

1.默认生成的函数

2.无法生成的情况

2.1当成员函数有引用 或者 被const修饰

2.2.operator=在基类被私有


1.默认生成的函数

class empty {};

//相当于

class empty
{
public:
    empty(){ ... } // 构造函数
    empty(const empty& rhs) { ... }// 拷贝构造
    ~empty(){ ... } //析构函数
    
    empty &operator=(const empty& rhs) { ... } //拷贝赋值
};

这些默认生成的函数都是public和inline。

如果程序员不去写这些函数 ,他们会在被调用的时候由编译器生成。

2.无法生成的情况

2.1当成员函数有引用 或者 被const修饰

template
class NameObject
{
public:
    NameObject(std::string &name, const T& obj)
    {
               
    }
private:
    std::string &nameValue;
    const T ObjcetValue;
}


std::string pet1 ("dog", 2);
std::string pet2 ("cat", 2);

pet1 = pet2; 

 当成员函数有引用 或者 被const修饰,编译器是不会自动生成 operator= 的,因为 &必须在定义的时候初始化,而且初始化之后不可以进行修改,const也同样,这个时候需要程序员手动写operator=。

2.2.operator=在基类被私有

operator=被声明为私有,派生类生成的默认operator=回去先调用基类类的operator=,但是没有权限,编译器也无能为力。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值