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"
如何从基类构造函数调用派生类虚方法?
=== 更新1 ===
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 覆盖 MyClass1 init 方法但它仍然显示“MyClass1 init”
C++ 如何像 java/C# 覆盖方法一样工作?
=== 更新2 ===
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++ 可以在 Constructor 方法中运行。
虽然 obj->init() 可以解决。
但是希望代码可以少写一点。
有些人忘记调用 init()。
Java/C# 可以少写多做。但是 C++ 不能……这很令人沮丧。