美文网首页
default constructor of 'stu' is

default constructor of 'stu' is

作者: 飞向深空 | 来源:发表于2023-05-31 11:27 被阅读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

相关文章

网友评论

      本文标题:default constructor of 'stu' is

      本文链接:https://www.haomeiwen.com/subject/jglyedtx.html