default constructor of 'stu' is
2023-05-31 本文已影响0人
飞向深空
错误原因:C++规定,当基类的构造函数没有参数,或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数。当基类含有带参数的构造函数时,派生类必须定义构造函数,以提供把参数传递给构造函数的途径。
#include <iostream>
using namespace std;
class Base{
public:
int AA;
int BB;
Base(int a,int b)
{
AA=a;
BB=b;
}
};
class stu: protected Base{
public:
int CC;
};
int main()
{
stu d1;//报错
return 0;
}
方法1:
在基类中增加一个无参构造函数
class Base{
public:
int AA;
int BB;
Base(int a,int b)
{
AA=a;
BB=b;
}
Base()
{
cout<<"Base"<<endl;
}
};
方法2:
提供把参数传递给构造函数的途径
#include <iostream>
using namespace std;
class Base{
public:
int AA;
int BB;
Base(int a,int b)
{
AA=a;
BB=b;
}
};
class stu: protected Base
{
public:
stu(int a,int b):Base(a,b)
{
cout<<"stu"<<endl;
}
int CC;
};
int main()
{
stu d1(1,2);
return 0;
}
注意:创建d1对象,两个方法的基类构造函数都会执行,方法1基类会执行无参构造函数不会执行有参构造函数
方法2则是基/派生类两个都执行,创建d1,基类的构造函数执行,导致AA=1,BB=2