类对象作为类成员
class A{
};
class B
{
A a;
}
A先构造,B再构造
B先析构,A再析构
对于赋值:
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
A(int aa,string xx)
{
a = aa;
x = xx;
cout << "A构造" << endl;
}
~A()
{
cout << "A析构" << endl;
}
int a;
string x;
};
class B
{
public:
//B(int a,string xx,int bb) :a1(a,xx),b(bb)//A a1=a隐式转换法
//{
// cout << "B构造" << endl;
//}
B(int aa, string xx, int bb):a1(aa, xx), b(bb)//***
{
cout << "B构造" << endl;
}
~B()
{
cout << "B析构" << endl;
}
int b;
A a1;
};
void t1()
{
B b(1,"abc",2);
cout << "a=" << b.a1.a << endl;
cout << "x=" << b.a1.x<<endl;
cout << "b=" << b.b<<endl;
}
int main()
{
t1();
system("pause");
return 0;
}
注意***处,如果A类中构造函数为
A(int aa)
{
a=aa;
}
则B类中构造函数为
B(int aa,int bb):a1(aa),b(bb)
{
cout << "B构造" << endl;
}
同时函数t1改为
void t1()
{
B b(1,2)
cout << "b=" << b.b<<endl;
cout << "a=" << b.a1.a << endl;
}
另一种赋值方式
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
/*A(int aa,string xx)
{
a = aa;
x = xx;
cout << "A构造" << endl;
}*/
A()
{
cout << "A的默认构造" << endl;
}
~A()
{
cout << "A析构" << endl;
}
int a;
string x;
};
class B
{
public:
/*B(int aa, string xx, int bb) :a1(aa, xx), b(bb)
{
cout << "B构造" << endl;
}*/
B( int aa, string xx, int bb)
{
a1.a = aa;
a1.x = xx;
b = bb;
cout << "B构造" << endl;
}
~B()
{
cout << "B析构" << endl;
}
int b;
A a1;
};
void t1()
{
B b(1,"abc",2);
cout << "a=" << b.a1.a << endl;
cout << "b=" << b.b << endl;
}
int main()
{
t1();
system("pause");
return 0;
}
使用这种方式,要求A的构造函数为默认构造函数
欢迎使用Markdown编辑器
你好! 这是你第