C++ 怎样禁止子类重写父类的某个虚函数?

例如: class A
{ virtual int SayHello(){...};}
class B:public A
{virtual int SayHello(){...};

class C:public B
{} 此时希望class C在语法上不允许改写SayHello方法,有谁知道怎么做?
有懂的大牛木?

不可能的事。
只要在A类中定义SayHello的时候加了virtual,那么SayHello就永远是个virtual函数,不管继承多少层、加不加virtual。
而子类怎么改写父类的函数,父类完全干涉不了。所以无法阻止C改写B的SayHello。
除非你把B类做成一个不允许其他类继承的类。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-03
C++11 提供指示字final,用来避免类型被继承,或是基底类型的函数被改写
class B:public A
{virtual int SayHello() fianl {...};
gcc4.7没问题,
vs2010好像不行,不识别final
vs2012没有试,需要win7/8本回答被提问者采纳

c++11 新特性总结(一)——关键字篇
为了防止子类重写父类的虚函数,C++11引入了override关键字。在声明子类的虚函数时添加override可以避免不必要的问题,如手误写错函数名导致编译通过但运行时出错的情况。Final关键字用于声明类的特定函数不能被子类重写,为类的某个部分提供不可变性。在类的构造函数管理上,C++11提供了default关键字,用于...

C++父类中声明了一个虚函数以后 是不是在子类 以及子类的子类中 都要...
基类声明虚函数只是提供一个接口,也就是实现多态的关键,子类基本都要继承的,如果有一个子类不需要实现这个函数,说明你的继承关系有问题,最好改变一下继承体系

C++编程中 子类(派生类)能不能重写父类(基类)的函数(方法),除了虚函数...
当然可以重写,函数名和参数保持一致就会重写;如果函数名一样,参数不一样则是隐藏;总之,非虚函数,只要子类定义了相同名称的,父类函数都不能直接访问。这样的问题,自己写个Test自然明了,印象也会更深刻。

C++ 重写父类方法问题
用virutal修饰父类中要重写的函数即可,参考代码如下:

C++中父类和子类的成员函数同名同参数同返回只是父类里面是虚函数,子类...
没有问题,这就是虚函数的作用,子类中可以override(重写)父类中的虚函数,给出子类自己的实现方法,子类中其实省略了父类函数声明前的virtual,子类中加上virtual也是没有问题的,可有可无。

C++父类中有纯虚函数,在子类的子类中也需要实现吗?
假设没有父类或者子类的实例对象,能够不实现父类的虚函数。(3)假设把虚函数写成纯虚函数,也就不须要实现了。也没不会发生上述讨论。子类中实现了,子子类就不用实现。子类没实现的话,子子类就可能需要实现。反正没有实现这个=0的函数的类是无法创建对象的。所以要实例化的类就要实现。

c++中的虚函数一定要在类中声明吗
虚函数机制,即派生类重载基类的同名函数。所以这个函数肯定是类的成员函数,既然是类的成员函数,当然要在类中声明了。

C++使用虚函数的时候,子类也要使用virtual关键字吗
父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如:class Base{ virtual bool init();};class Derived{ virtual bool init(); \/\/这里的vitual是必须的吗?好像不用也能编译通过呃...}; 不二syusukex | 浏览3801 次 |举报 我有更好的答案推荐于...

C++中是不是每个类(有虚函数)都对应一个virtual function table?
你理解的是对的,子类和父类各有一个虚函数表,并且虚函数指针也是指向各自的。子类先是从父类复制了一个虚函数表,如果子类对父类的虚函数进行了覆盖,则在子类的虚函数表将会用子类的函数地址覆盖父类的,如果没有覆盖,则还是使用父类的函数地址,这样就实现了多态。

C++中子类的变量能不能覆盖父类的变量?
1 子类和父类没有同名成员变量。此种情况下不会出现任何情况的覆盖。2 在父类中,有virtual修饰的虚成员变量,在子类中有与其同名同类型的成员变量。此种情况下,子类变量会覆盖父类变量。3 在父类中,存在有与子类同名同类型的成员变量,但没有virtual修饰。此时不会覆盖,但是会重写。即子类中访问...

相似回答