如何在不创建对象的情况下获取内存

时间:2018-05-31 10:09:36

标签: c++

#include<iostream>
using namespace std;
class A
{
    private:
    int a,b;

    public:
    void setdata(int x,int y){
         a=x;b=y;
    }

    void show_data(){
         cout<<a<<b;
    }
};

class B: public A{
};

main(){
   B b1;
   b1.setdata(3,4);
   b1.show_data();
}

即使我们没有创建类setdata的对象,A如何工作(变量ab如何获取内存)?如何使用类A的对象b1访问B的私有变量?我很惊讶地看到我的程序正常运行。

2 个答案:

答案 0 :(得分:3)

  

即使我们没有创建类setdata的对象,A如何工作(变量ab如何获得内存)

但代码确实创建了一个类A的对象,就在这里:

B b1;

由于B派生自A,因此B类型的每个对象都包含A类型的对象(基类子对象

  

如何使用类A

的对象b1访问B的私有变量?

是的,对象的类型为B,但实际进行访问的函数(setdata)是类A的成员,因此拥有成员对所有成员的访问权限班级A

答案 1 :(得分:0)

这就是继承应该如何运作:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/inher.htm

简而言之,您已经创建了一个B类型的对象,并且您已声明类B继承自类A。这意味着B 类型的对象也是A类,更具体。 float是一个数字的方式相同,而整数也是一个数字。狗是动物,而猫也是动物。

定义时

class B: public A { };

这意味着类B应该继承类A中的所有公共方法。 setdata是一种公共方法,show_data()

也是如此