子类构造函数
子类构造时一定会调用父类的构造函数,如果用户没有说明调用父类的哪一个构造函数,则调用父类的无参构造函数。如果父类没有无参构造函数,则编译错误。
如果子类没有拷贝构造函数,编译器会自动向子类添加一个拷贝构造函数,这个拷贝构造函数调用父类的拷贝构造函数。
如果子类有拷贝构造函数,且用户没有在子类的拷贝构造函数显示地说明调用父类的哪个构造函数,则先调用父类的无参构造函数,再调用子类的拷贝构造函数。
子类重载赋值号
子类不会继承父类的赋值号运算符重载。但是,
如果子类没有万能引用赋值号重载,则会使用父类的万能引用赋值号重载。如果子类有,则使用子类的。
#include<iostream>
using namespace std;
class A
{
public:
A operator=(const A& other)
{
cout<<"A 赋值"<<endl;
return A();
}
A operator=(int args)
{
cout<<"A 赋值 args"<<endl;
return A();
}
};
class B:public A
{
public:
// B operator=(const B& other)
// {
// cout<<"B 赋值"<<endl;
// return B();
// }
};
int main()
{
A a;
B b;
B b2;
b=b2;
//b=3; //加上这句编译不过,说明子类并没有继承父类的其他赋值号运算符重载。
}
程序输出
A赋值
如果把注释去掉,则程序输出
B赋值