//CopyStruct.h
#ifndef _COPY_STRUCT_H_
#define _COPY_STRUCT_H_
#include <stdio.h>
class AClass
{
public:
AClass(){}
~AClass(){}
public:
int a;
int b;
};
//要使用前向声明,必须不对AClass进行操作,所以最好是将成员函数的实现放在cpp文件里
//Class AClass;
class BClass
{
public:
BClass()
{
c = 0;
d = 0;
apClass = NULL;//将指针初始化为NULL,杜绝野指针
}
BClass(AClass *pClass)
{
this->apClass = pClass;
}
BClass(const BClass&)//定义新对象,并用已有对象初始化新对象时, 将被调用
{
apClass = new AClass;
printf("Hello world!\n\n");
}
~BClass()
{
c = 0;
d = 0;
}
public:
AClass *apClass;
private:
int c;
int d;
};
#endif
//CopyStruct.cpp
#include <stdio.h>
#include "CopyStruct.h"
void Test(BClass *bClass)
{
BClass *pBClass1 = bClass;
if (pBClass1 != NULL)
{
delete pBClass1;
pBClass1 = NULL;
}
}
void Test1(AClass *apClass)
{
AClass *apTmpClass = apClass;
if (apTmpClass != NULL)
{
delete apTmpClass;
apTmpClass = NULL;
}
}
int main()
{
AClass *pAClass = new AClass;
pAClass->a = 2;
pAClass->b = 3;
BClass *pBClass = new BClass(pAClass);
pBClass->apClass->a = 3;
pBClass->apClass->b = 4;
Test(pBClass);//cBClass为一个对象变量指针,分配在堆上,而不是栈上
BClass bTmpClass1;//定义临时对象, 用于调用复制构造函数
BClass bClass = bTmpClass;
Test1(bClass.apClass);
return 0;
}