class MyClass1
{
public:
MyClass1()
{
init();
}
virtual void init()
{
printf("MyClass1 init");
}
}
class MyClass2 : public MyClass1
{
public:
virtual void init()
{
printf("MyClass2 init");
}
}
int main()
{
MyClass2 *obj = new MyClass2();
return 0;
}
これを実現したい
"MyClass2 init"
しかし、それは実際にメッセージを表示します
"MyClass1 init"
基本クラスコンストラクターから派生クラス仮想メソッドを呼び出す方法は?
=== update1 ===
class MyClass1
{
public:
MyClass1()
{
init();
}
virtual void init()
{
printf("MyClass1 init");
}
}
class MyClass2 : public MyClass1
{
public:
MyClass2()
: MyClass1()
{
}
virtual void init()
{
printf("MyClass2 init");
}
}
MyClass2がMyClass1initメソッドをオーバーライドすることを望みますが、それでも「MyClass1init」が表示されます
C++はjava/C#オーバーライドメソッドのようにどのように機能しますか?
=== update2 ===
class MyClass1
{
public:
MyClass1()
{
init(); <--- can't work like test method ???
}
void test()
{
init(); <--- work fine
}
virtual void init()
{
printf("MyClass1 init");
}
}
class MyClass2 : public MyClass1
{
public:
MyClass2()
: MyClass1()
{
}
virtual void init()
{
printf("MyClass2 init");
}
}
obj-> init()がMyClass2::initを呼び出すことはわかっています。
しかし、C++がコンストラクターメソッドで実行できることを願っています。
obj-> init()は解決できますが。
しかし、私はコードが少し少なく書くことができることを願っています。
init()を呼び出すのを忘れる人もいます。
Java / C#は、より少ない書き込みでより多くのことを実行できます。しかし、C++はできません....これは非常に苛立たしいことです。