构造函数
问题:
基类构造函数中初始化的内容,当派生类构造时是也会在派生类构造函数中进行同样的构造供自己使用,还是派生类不构造,只是基类构造之后,派生类可以使用?
#include <iostream>
#include <chrono>
#include <thread>
class test1{
public:
test1(){
val=100;
std::cout<<"this class structrue is test1: "<<this<<std::endl;
}
private:
virtual void print()=0;
protected:
int val{0};
};
class test2:public test1{
public:
test2(){
num=200;
std::cout<<"this class structrue is test2: "<<this<<std::endl;
}
private:
void print() override{
std::cout<<"print"<<std::endl;
}
private:
int num=0;
};
int main(){
test2 t;
return 0;
}
可见:是在派生类中执行了基类构造函数中的初始化内容;
同理,我们常说的,类的构造函数初始化顺序:基类----派生类----子类;
并不是说,我们建立派生类对象时,先构造一个基类对象,而是因为继承了基类对象,所以派生类需要执行和基类构造函数初始化一样的功能,以完成从基类继承的构造工作;
如果说建立一个派生类,基类部分是通过构造一个基类对象实现的,那么派生类也就无法使用从基类继承的数据了。