zoukankan      html  css  js  c++  java
  • 关于虚函数,构造函数,非构造函数之间的交叉调用

    首先,上代码(还是代码引发的血案)

    class A
    {
    public:
    	A(){
    		this;
    		print();
    	}
    	virtual void print(){
    		this;
    		cout<<"A"<<endl;
    	}
    	void think(){
    		this;
    		print();
    	}
    	virtual ~A(){}
    
    private:
    
    };
    class  B:public A
    {
    public:
    	B(int temp):A(),x(temp)
    {
    
    
    }
    	virtual void print() override
    	{
    		this;
    		cout<<"B"<<endl;
    	}
    	virtual ~ B(){}
    
    private:
    	int x;
    
    };
    

      

    B b(3);
    b.think();

    输出的结果:

    A

    B

    为什么会出现这种情况呢?

    因为子类并不继承父类的构造函数和析构函数!!!

    相反会继承成员函数和虚函数,

    在执行子类的构造函数时,会调用父类的构造函数,记住,是调用,也就是A::A(),这样一来,是进入了A类的作用域,this指针也就是A类对象的this指针

    而执行成员函数时,因为继承的关系,所以一直处于子类的作用域,

    记住,只要是子类继承父类,除了构造函数和析构函数之外,根本不存在父类的作用域,this指针全部都是子类对象的指针!!!!

  • 相关阅读:
    java命令模式
    java中介者模式
    java访问者模式
    java状态模式
    java责任链模式
    java策略模式(及与工厂模式的区别)
    github token 位置
    Yii2 Queue队列
    sz与rz
    vim
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/6444842.html
Copyright © 2011-2022 走看看