gpt4 book ai didi

c++ - 抽象和纯虚拟方法

转载 作者:行者123 更新时间:2023-11-30 02:41:42 24 4
gpt4 key购买 nike

我正在尝试实现一些从基类继承部分行为的派生类。基类是这样的:

class Number {
public:
virtual string getName() = 0;
void writeName() {
string name = this->getName();
printf("My Name is %s\n", name.c_str());
}

Number() {
this->writeName();
}
};

class One : Number {
string getName() {return string("One");}
};

class Two : Number {
string getName() {return string("Two");}
};

int main() {
One *n = new One();
}

我希望这会输出“我的名字是一个”,但我得到一个异常,说“调用了纯虚拟方法”。我是以错误的方式接近这个吗?还是我在类和成员的声明中遗漏了一些东西,所以我得到了这个意想不到的结果?或者这实际上是预期的结果吗?如果是这样,我怎样才能达到我的需要?

最佳答案

你得到这个异常是因为你从构造函数内部调用方法。根据 C++ 规则,类构造函数中的所有虚成员函数都被分派(dispatch)给类本身的实现,而不是其子类。这个决定背后的逻辑是,否则成员函数将在对象初始化完成之前在对象上运行。

对此没有解决方法:如果您需要子类的构造函数来执行不同的操作,执行这些操作的代码应该放在子类构造函数本身中。

关于c++ - 抽象和纯虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com