//条款05:了解C++默默编写并调用了哪些函数
#include<iostream>
using namespace std;
class A
{
int number;
public:
A(int n):number(n) //构造函数
{
}
A(const A& rhs) :number(rhs.number) //拷贝构造函数
{
}
A& operator = (const A& rhs) //拷贝赋值函数
{
this->number = rhs.number;
}
int GetNumber(void)
{
return number;
}
~A() //析构函数
{
}
};
class B
{
//如果你自己没声明,编译器会为你声明一个拷贝构造函数(浅),一个拷贝赋值函数,一个无参构造函数,一个非虚析构函数
//切都是公开内联的
};
int main()
{
//A a1;//报错,因为你自己声明了一个有参构造函数,编译器不会为你声明无参构造函数了
A a1(5);
A a2(a1); //自己写的拷贝构造,不写编译会为你声明
A a3 = a1; //自己写的赋值构造 ,不写编译会为你声明
cout << "a1: " << a1.GetNumber() << endl;
cout << "a2: " << a2.GetNumber() << endl;
cout << "a3: " << a3.GetNumber() << endl; //运行的结果一致
B b1; //声明一个对象,通过默认构造函数
B b2 = b1; //拷贝赋值
B b3(b1); //拷贝构造
}
class C
{
int& m_number;
const char m_c;
public:
C(int number, char c) :m_number(number), m_c(c)
{
}
};
int main()
{
C c1(10,'a');
C c2(20,'b');
//c2 = c1; //报错,因为编译器不为这种情况生出拷贝赋值函数。
}
/*
如果你打算对一个内含引用成员和const成员的对象进行赋值操作,C++编译器拒绝为你定义该操作,所以必须自己定义一个拷贝赋值函数。
*/
每天学习一个C++提升的小技巧之条款05:了解C++默默编写并调用了哪些函数
猜你喜欢
转载自blog.csdn.net/weixin_50188452/article/details/111178922
今日推荐
周排行