zoukankan      html  css  js  c++  java
  • 在成员函数中调用虚函数(关于多态的注意事项)------新标准c++程序设计

      类的成员函数之间可以互相调用。在成员函数(静态成员函数、构造函数和析构函数除外)中调用其他虚成员函数的语句是多态的。例如:

    #include<iostream>
    using namespace std;
    class CBase
    {
    	public:
    		void func1()
    		{
    			func2();
    		}
    		virtual void func2(){cout<<"CBase::func2()"<<endl;}
    };
    class CDerived:public CBase
    {
    	public:
    		virtual void func2(){cout<<"CDeriver::func2()"<<endl;}
    };
    int main()
    {
    	CDerived d;
    	d.func1();
    	return 0;
    }
    

      输出:

    CDeriver::func2()
    

      第20行调用func1成员函数。进入func1成员函数,执行到第8行,调用func2函数。看起来调用的应该是CBase类的func2成员函数,但输出结果证明实际上调用的是CDerived类的func2成员函数。这是因为,在func1函数中,“func2();”等价于“this->func2();”,而this指针显然是CBase*类型的,即是一个基类指针,那么“this->func2();”就是在通过基类指针调用虚函数,因此这条函数调用语句就是多态的。当本程序执行到第8行时,this指针指向的是一个CDerivrd类的对象,即d,因此被调用的是CDerived类的func2成员函数。

    新标准c++程序设计

  • 相关阅读:
    BZOJ4008: [HNOI2015]亚瑟王
    BZOJ4260: Codechef REBXOR
    BZOJ4408: [Fj Winter Camp 2016]神秘数
    BZOJ4010: [HNOI2015]菜肴制作
    ccc2016
    BZOJ3884: 上帝与集合的正确用法
    BZOJ1017: [JSOI2008]魔兽地图DotR
    BZOJ1011: [HNOI2008]遥远的行星
    BestCoder Round #73
    hdu4035(概率dp)
  • 原文地址:https://www.cnblogs.com/l2017/p/8260301.html
Copyright © 2011-2022 走看看