• 在成员函数中调用虚函数(关于多态的注意事项)------新标准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++程序设计

  • 相关阅读:
    python 迭代器
    python 语言特性
    JavaScript 【语句】for-in语句
    Vue实例-创建第一个VUE应用
    【安装】Vue( 直接使用<script>方式引入、CDN方式引入 )
    到某个目录下新建文件
    NVM 安装( Windows)
    尾调用
    JavaScript 【函数表达式】私有变量
    JavaScript 【函数表达式】模仿块级作用域
  • 原文地址:https://www.cnblogs.com/l2017/p/8260301.html
Copyright © 2020-2023  润新知