实例代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class A{
public:
A(int i, int j, int k = 5){
}
A(){}
};
class Grand {
public:
Grand(int i) :m_valuegrand(i){
}
virtual ~Grand(){
}
void myinfo(){
cout << m_valuegrand << endl;
}
public:
int m_valuegrand;
};
class G : public Grand{ //继承自爷爷类
public:
G(int i) : Grand(i), m_valuea(i){ //每个子类的构造函数,负责解决自己父类的初始化问题。
}
virtual ~G(){
}
void myinfo(){
cout << m_valuea << endl;
}
public:
int m_valuea;
};
class B : public A{
public:
B(int i, int j, int k) : A(i, j, k){}
using A::A; //继承A的构造函数。 using :就让某个名字在当前作用域内可见。
//遇到这条代码的时候,会把基类的每个构造函数,都生成一个与之对应的派生类构造函数。
//B(析构函数形参列表 ... ): A(照抄的构造函数形参列表){} : 函数为空
//B(int i, int j, int k):A(i, j, k){}
//如果基类A的构造函数有默认参数的话, 那么编译器遇到这种using A::A的时候,就会帮咱们在派生类B中构造出多个构造函数来。
//a) 第一个构造函数是带有所有参数的构造函数
//b) 其余的构造函数,每个分别省略掉 一个默认参数。
//B(int i, int j, int k):A(i, j, k){}
//B(int i, int j):A(i, j){}
//如果类B,只含有using A::A从A类继承来的构造函数的话,那么编译器是会给它合成默认的构造函数的。
};
int main() {
//没什么知识点,都很简单
system("pause");
return 0;
}