【发布时间】:2021-08-27 18:01:39
【问题描述】:
我正在用 c++ 实现装饰器设计模式,我遇到了这个问题(代码取自 https://www.studytonight.com/cpp/initializer-list-in-cpp.php):
#include<iostream>
using namespace std;
class Base_
{
public:
// parameterized constructor
Base_(int x)
{
cout << "Base Class Constructor. Value is: " << x << endl;
}
};
class InitilizerList_:public Base_
{
public:
// default constructor
InitilizerList_()
{
Base_ b(10);
cout << "InitilizerList_'s Constructor" << endl;
}
};
int main()
{
InitilizerList_ il;
return 0;
}
正如网站所述,这不会编译,因为在派生构造函数之前调用了基构造函数,并且使用初始化列表解决了这个问题。我的问题是:这可以在没有初始化列表的情况下实现吗?如果可以,如何实现?初始化器列表是在 c++ 11 中引入的(我认为)那么如果您尝试在 c++ 98 中执行此操作呢?
【问题讨论】:
-
您将“初始化列表”与“基类初始化”和“成员初始化”混为一谈。该链接中的代码在 C++98 中可以正常工作。
-
(顺便说一句,那个网页很糟糕。请参阅stackoverflow.com/questions/388242/… 以获得更好的选择。)
标签: c++ c++11 inheritance decorator c++98