- 84
- 0
《C++ Primer》(第五版)第541页中说:值得注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部。
但是当我们做如下实验的时候却会发生报错:
#include <iostream>
class A {
public:
virtual void printClassName() { std::cout << "This is class A" << std::endl; }
};
class B : public A {
public:
void printClassName() = 0;
};
void B::printClassName() { std::cout << "This is class B" << std::endl; }
class C : public B {
public:
void printClassName() override { std::cout << "This is class C" << std::endl; }
};
// void C::printClassName()
int main(int argc, char const *argv[])
{
A a;
B b;
C c;
a.printClassName();
b.printClassName();
c.printClassName();
return 0;
}
错误信息如下所示:
a.cpp: In function 'int main(int, const char**)':
a.cpp:25:7: error: cannot declare variable 'b' to be of abstract type 'B'
B b;
^
a.cpp:8:7: note: because the following virtual functions are pure within 'B':
class B : public A {
^
a.cpp:13:6: note: 'virtual void B::printClassName()'
void B::printClassName() { std::cout << "This is class B" << std::endl; }
^
也就是说对于声明了纯虚函数的class B本身来说即使定义了纯虚函数的函数体也是没有意义的,但这显然和书中所讲不符,请问这里面有什么问题吗?还是我的理解出现了问题,谢谢大佬~
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
