大佬教程收集整理的这篇文章主要介绍了防止覆盖和/或隐藏基类功能(C 11),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
bases.h ….
#ifndef baseexample_h #define baseexample_h #include <iostream> class Base{ public: void foo() { std::cout << "Base.foo()\n" << std::endl; } }; class Derived: public Base{ public: void foo(){ std::cout << "Derived.foo()\n" << std::endl; } }; #endif
和main.cpp …
#include "bases.h" #include <iostream> int main() { Base base; Derived derived; base.foo(); derived.foo(); std::cin.get(); return 0; };
当然是输出
Base.foo() Derived.foo()
因为派生的foo()函数隐藏了基本的foo函数.我想防止可能的隐藏,所以我的想法是将头文件基本定义更改为:
//..... class Base{ public: virtual void foo() final { std::cout << "Base.foo()\n" << std::endl; } }; class Derived: public Base{ public: void foo(){ //compile error std::cout << "Derived.foo()\n" << std::endl; } }; //......
这似乎强制执行我想要的编译器错误,防止覆盖和/或隐藏在c中,但我的问题是,这是一个很好的做法,因为foo()从来不是一个虚拟函数开始?这是否有不利因为我有点滥用虚拟关键字?谢谢.
以上是大佬教程为你收集整理的防止覆盖和/或隐藏基类功能(C 11)全部内容,希望文章能够帮你解决防止覆盖和/或隐藏基类功能(C 11)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。