[英]C++: polymorphism, initialization lists and const variables
假设我有 2 节课:
class A {
private:
int x;
const int y;
public:
A(int x) : x(x) {}
virtual foo() = 0;
}
class B : public A {
public:
B(int x, int y) : A(x), y(y) {}
}
这是我对调用 B 的构造函数时会发生什么的理解:
这段代码最后一行不好,因为 const int y 是 A 的成员,所以在调用 A 的构造函数时隐式初始化了,所以不能在 B 的构造函数中再次初始化。因为它是常量。
如何通过 B 的构造函数初始化 y,而它仍然是 const 并且仍然在 A 中定义?
换句话说,我想调用A的初始化列表,然后是B的初始化列表,然后是A的主体,然后是B的主体。
编辑:改写我的问题:假设我有一个抽象的 class A,B 和 C 继承自它。 我想在 A 的每个子类中保存一个 const 变量 X。X 的值取决于我们所在的子类(B/C)。 初始化应该如何工作?
如何通过 B 的构造函数初始化 y,而它仍然是 const 并且仍然在 A 中定义?
A
的构造函数必须完全初始化A
,因此它必须初始化y
。 如果它自己不能这样做,则必须向它提供这样做的信息。
class A {
private:
int x;
const int y;
public:
A(int x, int y) : x(x), y(y) {}
}
B
必须提供该信息:
class B : public A {
public:
B(int x, int y) : A(x, y) {}
}
换句话说,我想调用A的初始化列表,然后是B的初始化列表,然后是A的主体,然后是B的主体。
那不会解决任何问题。 B
的初始化列表无法初始化A
的成员,并且两者的主体都无法初始化 const 成员。 所以即使你有能力以这种方式订购东西,我们没有,唯一初始化y
的地方是A
的初始化列表,和以前一样。
编辑:改写我的问题:假设我有一个抽象的 class A,B 和 C 继承自它。 我想在 A 的每个子类中保存一个 const 变量 X。X 的值取决于我们所在的子类(B/C)。 初始化应该如何工作?
A
的构造函数可以带一个参数来初始化 const 成员,派生的 class 构造函数可以传递它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.