【发布时间】:2020-03-23 23:16:55
【问题描述】:
我想知道我是否想使用基类中的构造函数
() 而不是 {} 来拥抱构造函数的参数,
是这样的:
class base
{
private:
int a , b;
public:
base(int a , int b) : a{a} , b{b} {};
}
class derived
{
private:
int c , d ;
public:
derived(int a , int b , int c , int d) : base(a , b) , c{c} , d{d} {};
^
|
//i mean above base(a , b) istead of base{a ,b}
}
【问题讨论】:
-
当然是“未声明的标识符”。你能指出
derived的哪一行定义了a和b是什么吗?仅仅因为基类中有一些同名的参数,那并不意味着什么。首先构造的是派生类,它需要知道一切是什么。您需要弄清楚派生类需要将哪些参数传递给基类的构造函数,这只有您知道它应该是什么,因为只有您知道这些类应该如何工作。有关更多信息,请参阅您的 C++ 书籍。 -
它应该看起来像
derived(int input) : base(a,b),但您需要定义a和b是什么。你不能随便弥补。也许你的意思是derived(int intput, int a, int b) : base(a,b) -
您希望
derived(int input) : base(a, b)做什么?让我们看一个具体的案例。假设有人使用derived x{3};定义了一个变量——在构造x时,您希望采取哪些步骤?什么价值观去哪儿了?
标签: c++ class inheritance constructor