#include<iostream>
using namespace std;
class A {
private:
int x;
public:
A(int a=0);
~A();
friend class B;//为什么class B不需要向前引用声明,郁闷
};
A::A(int a) {
x = a;
cout << "A构造完成" << endl;
}
A::~A() {
cout << "A析构完成" << endl;
}
class B {
private:
A a;
public:
B(int x);
//B(const A& p);
~B();
void set(int i) {
a.x = i;
}
void display() {
cout << "B:display:" << a.x << endl;
}
};
/*
B::B(int x):a(x) {
cout << "B构造完成" << endl;
}
B::B(const A& p) :a(p) {
cout << "B构造完成" << endl;
}
*/
B::B(int x) {
A r(x);//使用这种方式,需要A类构造函数是无参数的
a = r;
cout << "B构造完成" << endl;
}
B::~B() {
cout << "B析构完成" << endl;
}
int main() {
B b(2);
//A p(1);
//B b(p);
b.display();
b.set(3);
b.display();
return 0;
}
/*
*
A构造完成
A构造完成
B构造完成
A析构完成
B:display:2
B:display:3
B析构完成
A析构完成
*/
/*
A构造完成
B构造完成
B:display:2
B:display:3
B析构完成
A析构完成
*/
/*
A构造完成
B构造完成
B:display:1
B:display:3
B析构完成
A析构完成 为什么多了一次析构呢,那应该A会多一次构造,为什么没有显示出来
A析构完成
*/