委托构造
委托构造函数就是在一个构造函数的初始化列表中,调用另一个构造函数。
#include <iostream>
#include <string>
using namespace std;
class AA {
private:
int m_a;
int m_b;
double m_c;
public:
AA(double c) {
m_c = c+3;
cout <<"AA(double c)"<<endl;
}
AA(int a, int b) {
m_a = a + 1;
m_b = b + 1;
cout <<"AA(int a, int b)"<<endl;
}
AA(int a, int b, const string& str):AA(a, b) {
cout <<"m_a = "<<m_a<<" m_b="<<m_b<<" str = "<<str<<endl;
}
AA(double c, const string& str):AA(c) {
cout <<"m_c = "<<m_c<<" str = "<<str<<endl;
}
};
int main()
{
AA aa(11,22, "张三");
AA aa2(4.5, "李思");
}
![](https://img.haomeiwen.com/i13167756/2b876eb953e51740.png)
继承构造
c11推出了继承构造,在派生类中,使用using来声明继承基类的构造函数。
#include <iostream>
#include <string>
using namespace std;
class AA {
public:
int m_a;
int m_b;
AA(int a):m_a(a) {
cout <<"AA(int a)"<<endl;
}
AA(int a, int b):m_a(a),m_b(b) {
cout <<"AA(int a, int b)"<<endl;
}
};
class BB:public AA {
public:
double m_c;
using AA::AA;//使用基类的构造函数
// BB的构造函数会先调用父类AA的构造函数
BB(int a, int b, double c):AA(a,b),m_c(c) {
cout <<"BB(int a, int b, int c)"<<endl;
}
void show() {
cout <<"m_a="<<m_a<<" m_b="<<m_b<<" m_c="<<m_c<<endl;
}
};
int main()
{
BB b1(10);// 使用基类有一个参数的构造函数,初始化m_a
b1.show();
BB b2(11,22);// 使用基类有两个参数的构造函数,初始化m_a m_b
b2.show();
BB b3(23,44,30.3);// 使用基类有两个参数的构造函数,初始化m_a m_b,同时初始化m_c
b3.show();
}
网友评论