-
主要内容
-
非虚函数
-
案例
#include <iostream> #include <memory> class A { public: void show(int a){ std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: void show(int a) { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); a->show(1); }
show : 6 [Finished in 651ms]
-
-
函数名一致
-
略
-
析构
#include <iostream> #include <memory> class A { public: virtual ~A() { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: ~B() { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); delete a; }
~B : 13 ~A : 6 [Finished in 502ms]
-
显式调用
#include <iostream> #include <memory> class A { public: virtual ~A() { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: ~B() { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); a->~A(); }
~B : 13 ~A : 6 [Finished in 506ms]
-
-
入参不一致
-
案例
#include <iostream> #include <memory> class A { public: virtual void show(int a){ std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: virtual void show(bool a) { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); a->show(1); }
show : 6 [Finished in 477ms]
-
小结
-
-
修饰不一致
-
案例
#include <iostream> #include <memory> class A { public: virtual void show(int a) const { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: virtual void show(int a) { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); a->show(1); }
show : 6 [Finished in 808ms]
-
小结
-
-
override
解决的问题 -
final
-
禁止重载
-
案例
#include <iostream> #include <memory> class A { public: virtual void show(int a) const final { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; class B:public A { public: virtual void show(int a) const override { std::cout << __FUNCTION__ << " : " << __LINE__ << std::endl; } }; int main() { A *a = new B(); a->show(1); }
D:\codes\cfile\Test\test.cpp:12:18: error: virtual function 'virtual void B::show(int) const' overriding final function virtual void show(int a) const override { ^~~~ D:\codes\cfile\Test\test.cpp:5:18: note: overridden function is 'virtual void A::show(int) const' virtual void show(int a) const final { ^~~~ [Finished in 371ms]
-
-
符号修饰的函数场景
-
返回值和异常兼容
-
总结
C++11多肽类 必用关键字 override
最新推荐文章于 2022-07-04 20:37:26 发布