新人工作总结,dnf精灵守护者,湘西剿匪
#include <iostream> class base{ public: virtual int fcn(){ std::cout << "base fcn()" << std::endl; } }; class d1 : public base{ public: using base::fcn; int fcn(int){//形参与base的fcn不一致,所以隐藏了base的fcn std::cout << "d1 fcn(int)" << std::endl; } virtual void f2(){ std::cout << "d1 f2()" << std::endl; } }; class d2 : public d1{ public: int fcn(int){//隐藏了d1::fcn(int) std::cout << "d2 fcn(int)" << std::endl; } int fcn(){//覆盖了base的虚函数fcn std::cout << "d2 fcn()" << std::endl; } void f2(){//覆盖了d1的虚函数f2 std::cout << "d2 f2()" << std::endl; } }; int main(){ base b; d1 d1; d2 d2; d1.fcn(); base* bp1 = &b; base* bp2 = &d1; base* bp3 = &d2; bp1->fcn();//调用虚函数,将在运行时调用base::fcn bp2->fcn();//调用虚函数,将在运行时调用base::fcn bp3->fcn();//调用虚函数,将在运行时调用d2::fcn d1* d1p = &d1; d1* d2p = &d2; //bp2->f2();//‘class base’ has no member named ‘f2’ d1p->f2();//调用虚函数,将在运行时调用d1::f2 d2p->f2();//调用虚函数,将在运行时调用d2::f2 base* p1 = &d2; d1* p2 = &d2; d2* p3 = &d2; //p1->fcn(12);//error p2->fcn(12);//静态调用,调用d1::fcn(int) p3->fcn(12);//静态调用,调用d2::fcn(int) }
base fcn() base fcn() base fcn() d2 fcn() d1 f2() d2 f2() d1 fcn(int) d2 fcn(int)
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论