在c++中如何在没有子类构造函数的情况下将值传递给基类的构造函数?

monwx1rj  于 2022-12-24  发布在  其他
关注(0)|答案(4)|浏览(138)

在C++中,我创建了一个叫做parent的基类。在这个类中,我创建了一个可以带一个参数的构造函数。我的子类名是child。在我的子类中没有任何构造函数。我的代码如下:

#include<iostream>
using namespace std;
class parent{
public:
    parent(int number){
        cout<<"Value of the number from parent class is: "<<number<<endl;
    }
};
class child: public parent{
public:
    child(): parent(10){
    }
};
int main()
{
    child ob(100);
    return 0;
}

当我尝试运行上面的代码时,编译器“显示没有与调用'child::child(int)'匹配的函数”。
我不想在子类中创建任何参数化的构造函数。如何传递父类构造函数的值?如何解决这个问题?

sbdsn5lh

sbdsn5lh1#

您有三种选择:
1.不使用参数,仅使用child默认构造
1.创建一个child构造函数,它接受所需的参数(可能带有默认值)
1.将parent构造函数拉入child类:

class child : public parent {
public:
    using parent::parent;  // Add the parent constructor to this scope

    child() : parent(10) {
    }
};
jucafojl

jucafojl2#

我怎样才能解决这个问题?
在子类中添加using声明using parent::parent;

class child: public parent{
public:
    using parent::parent; //added this using declaration
    child(): parent(10){
    }
};
z9smfwbn

z9smfwbn3#

在您的main方法中,您尝试使用int作为参数从child类调用构造函数。此错误源于缺少此构造函数。要将number传递给父类,您需要如下构造函数:

child(int number): parent(number) {}

child类中。

jfgube3f

jfgube3f4#

在第一个注解中给出了单级继承中这类问题的解决方案。但在多级继承的情况下,我们可以通过以下方式解决:

#include<iostream>
using namespace std;
class parent{
public:
    parent(int number){
        cout<<"Value of the number from parent class is: "<<number<<endl;
    }
};
class child: public parent{
public:
    using parent::parent;//Adding the parent constructor to this scope
    child(): parent(10){
    }
};
class child2: public child{
public:
    using child::child; //Adding the child constructor to this scope
    child2(): child(10){
    }
};
int main()
{
    child2 ob(100);
    return 0;
}
//Output: Value of the number from parent class is: 100

相关问题