【发布时间】:2012-09-02 07:39:01
【问题描述】:
我有鸡肉鸡蛋问题。
我想为容器类创建接口,这样我就可以强制实现特定的属性访问器和其他方法,同时我希望能够从容器构造函数中调用这些方法。
但正如我们所知,从构造函数调用虚方法将调用基类方法,因为层次结构中的构造函数被调用的顺序。
所以问题是我需要虚拟方法来强制实现,但这是我不能在构造函数中调用的东西。
编辑:我希望在必须实现容器类(C1,C2 ...)时强制实现特定方法,其次我希望能够在容器构造函数中使用这些方法。简单来说,我想实现 INTERFACE 要求,仅声明混合。谢谢
你怎么解决这个问题 ?
以下是代码示例。
#include <iostream>
using namespace std;
class Base {
public:
virtual void myvirt() { cout << "Base::virt()" << endl; };
};
class C1 : public Base {
public:
C1() {cout << "C1()" << endl; C1::myvirt(); };
C1(int i) { cout << "C1(int)" << endl; }
void myvirt() { cout << "C1::virt" << endl;}
};
class C2 : public Base {
public:
C2() {cout << "C2()" << endl; C2::myvirt();};
C2(int i) { cout << "C2(int)" << endl; }
void myvirt() { cout << "C2::virt" << endl;}
};
template<class C = C1>
class Sc: public C {
public:
Sc() : C() { cout << "Sc()" << endl; };
Sc(int n): C(n) { cout << "Sc(int)" << endl; };
};
int main() {
Sc<C2> $sx(12);
return 0;
}
正如我所问的,是否有某种方法可以强制在特定 Constructors() 的后代类中实现。 类似于“虚拟构造函数”。
【问题讨论】:
-
不清楚你想要什么。
-
您要调用哪些特定的派生方法?在构造对象之前调用对象的成员函数没有通用的解决方案。
-
在 C1 的构造函数中调用虚函数会调用 C1 的重载,所以不清楚你需要做什么而你还没有做什么。
-
主要是属性 getter/setters/checkers... 但我得出的结论相同,即没有通用的方法。大卫提出的克隆方法似乎是最好的方法。我只是不喜欢所涉及的多余语法。
标签: c++ constructor virtual