我有雞< - >雞蛋問題。
我想創建一個容器類的接口,以便我可以強制實現特定的attr訪問器和其他方法,同時我希望能夠從Containers構造函數中調用這些方法。
但是,正如我們所知,由於調用層次結構中的構造函數的順序,因此從構造函數調用虛方法將調用基類方法。
所以問題是我需要虛擬方法來強制執行,但這是我不能在構造函數中調用的東西。
編輯:我想要當我必須實現容器類(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;
}
正如我問的是有一些方法來強制執行的子孫類特定構造的()。 就像「虛擬建設者」。
目前尚不清楚你想要什麼。 –
你試圖調用哪些特定的派生方法?在構造對象之前沒有通用的解決方案來調用對象的成員函數。 –
在C1的構造函數中調用一個虛函數會調用C1的重載,所以目前還不清楚你需要做什麼,你還沒有做。 –