分析下面的代码#include<iostream> using namespace std; class A{ public: A(int a,int b):x(a),y(b){ cout<<"A constructor..."<<endl; } void Add(int a,int b){ x+=a;y+=b;} void display(){ cout<<"("<<x<<","<<y<<")";} ~A(){cout<<"destructor A..."<<endl;} private: int x,y; }; class B:private A{ private: int i,j; A Aobj; public: B(int a,int b,int c,int d):A(a,b),i(c),j(d) ,Aobj(1,1){ cout<<"B constructor..."<<endl;} void Add(int x1,int y1,int x2,int y2) { A::Add(x1,y1); i+=x2; j+=y2; } void display(){ A::display(); Aobj.display(); cout<<"("<<i<<","<<j<<")"<<endl; } ~B(){cout<<"destructor B..."<<endl;} }; int main() { B b(1,2,3,4); b.display(); b.Add(1,3,5,7); b.display(); return 0; }
时间: 2023-06-19 11:10:01 浏览: 72
使用include <iostream>时一定要加using namespace std
这段代码定义了两个类 A 和 B,并在 main 函数中创建了一个 B 类的对象 b。
A 类中有两个私有成员变量 x 和 y,一个构造函数 A(int a, int b),一个成员函数 Add(int a, int b) 用于对 x 和 y 进行加法操作,以及一个成员函数 display() 用于显示 x 和 y 的值。
B 类继承自 A,并在构造函数 B(int a, int b, int c, int d) 中调用了 A 的构造函数 A(a, b),同时还有两个私有成员变量 i 和 j,以及一个 A 类对象 Aobj。B 类还定义了一个成员函数 Add(int x1, int y1, int x2, int y2),该函数同时对 A 类中的 x 和 y 和 B 类中的 i 和 j 进行加法操作。另外,B 类还有一个 display() 函数,用于显示 A 类中的 x 和 y,Aobj 中的 x 和 y,以及 B 类中的 i 和 j。
在 main 函数中,首先创建了一个 B 类对象 b,并调用了 b 的 display() 函数,输出了 A 类中的 x 和 y,Aobj 中的 x 和 y,以及 B 类中的 i 和 j。接着调用了 b 的 Add(1, 3, 5, 7) 函数,对 A 和 B 类中的变量进行加法操作,并再次调用 b 的 display() 函数,输出了加法操作后的结果。
需要注意的是,A 类中定义的析构函数 ~A() 和 B 类中定义的析构函数 ~B() 都在对象被销毁时被调用,用于释放对象占用的内存空间。在这段代码中,对象 b 的析构函数会先调用 B 类的析构函数 ~B(),然后再调用 A 类的析构函数 ~A() 和 Aobj 的析构函数 ~A()。
阅读全文