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++程序设计

  • 相关阅读:
    代码操作
    购物车
    利息计算器
    生成海报
    知识库
    JavaScript处理字符串--参照W3C
    C#输入排序-冒泡
    enum举例
    C# 表达式计算器----数据结构
    C# 测试单词的完美度
  • 原文地址:https://www.cnblogs.com/l2017/p/8260301.html
Copyright © 2011-2022 走看看