相关疑难解决方法(0)

私有,公共和受保护继承之间的区别

是什么区别public,private以及protected用C++继承?我在SO上发现的所有问题都涉及具体案例.

c++ inheritance encapsulation c++-faq access-specifier

952
推荐指数
14
解决办法
65万
查看次数

为什么从构造函数对纯虚函数的虚拟调用是UB,标准允许调用非纯虚函数?

从10.4 抽象类 parag.标准中的6:

"可以从抽象类的构造函数(或析构函数)调用成员函数;直接或间接地对从这样的构造函数(或析构函数)创建(或销毁)的对象进行纯虚函数的虚拟调用的效果未定义."

假设标准允许从构造函数(或析构函数)调用非纯虚函数,为什么区别?

[编辑]关于纯虚函数的更多标准引用:

§10.4/ 2通过在类定义中的函数声明中使用纯说明符(9.2)来指定虚函数.只有在使用(12.4)qualified-id语法(5.1)调用时,才需要定义纯虚函数.... [注意:函数声明不能​​同时提供纯指定符和定义-end note]

§12.4/ 9 析构函数可以声明为虚拟(10.3)或纯虚拟(10.4); 如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数.

一些需要回答的问题是:

  • 如果纯虚函数没有给出实现,那么这不应该是编译器或链接器错误吗?

  • 在为纯虚函数赋予实现的情况下,为什么在这种情况下不能很好地定义它来调用这个函数?

c++ standards pure-virtual

17
推荐指数
1
解决办法
8240
查看次数