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

  • 相关阅读:
    docker下使用caffe的命令记录
    docker安装caffe
    Docker的安装及简单使用
    Docker 安装jupyter notebook
    3*3卷积核实例
    2D image convolution
    nump中的为随机数产生器的seed
    R410自带SAS6IR卡折腾记
    ROS多个网段做隔离
    python easy install时,使用aliyun阿里云镜像提示主机名不匹配的问题
  • 原文地址:https://www.cnblogs.com/l2017/p/8260301.html
Copyright © 2011-2022 走看看