64,652
社区成员
发帖
与我相关
我的任务
分享
#include <iostream.h>
#include <assert.h>
#include <string.h>
class address
{
public:
address()
{
m_addressdata = new char[1024];
assert(m_addressdata != 0);
memset(m_addressdata, 0, sizeof(m_addressdata));
}
~address()
{
delete []m_addressdata;
}
void SetAddress(const char* data)
{
if (strlen(data) > 1024)
{
return;
}
strcpy(m_addressdata, data);
}
private:
char* m_addressdata;
};
class person
{
public:
address& GetAddress(void)const //程序虽然高效,但是却是返回引用,导致可以修改内部成员m_add
//这样的话就违反了把m_add设置为private的初衷了
{
return const_cast<address&>(m_add); //;
}
const address* GetAddress2(void)const //返回const指针,但是强制转换后还是可以修改m_add的数据
{
return &m_add; //;
}
private:
address m_add;
};
void main()
{
person Jacky;
address& Temp = Jacky.GetAddress();
Temp.SetAddress("HelloWorld");
address* Temp2 = const_cast<address*>(Jacky.GetAddress2());
Temp2->SetAddress("1234");
}
class person
{
public:
address& GetAddress(void)const //将这里的返回值改为const会使程序更好点
{
return const_cast<address&>(m_add); //;
}
const address* GetAddress2(void)const
{
return &m_add; //;
}
private:
address m_add;
};