c++拷贝构造函数和赋值函数注意的地方
来源:互联网 发布:三菱plc编程软件手机版 编辑:程序博客网 时间:2024/06/10 14:02
运用Copy函数和Copy assignment函数进行赋值操作应该注意的两点:
1) 复制所有local成员变量
2) 调用所有基类内的适当的copying函数。
这里面有一个很可怕的规则:当你不用编译器默认的拷贝函数或者赋值函数时,编译器也不会对你自己写的这两个函数进行报警。所以必须要很谨慎和小心。
对于没有继承的类来说,写这两个函数一般注意指针类型的复制就可以了
Class Base{
Public:
Base(Base& base);
Base& operator=(const Base& base);
Private:
char* name;
int age;
};
Base& Base::operator=(const Base& base)
{
if(strcmp(name,base .name) = = 0) return *this; //自我复制的检测
name = new char[strlen(base.name)+1];
strcpy(name,base.name);
return *this;
}
如果后来增加了一个int age,但operator=里面什么都没有做,编译器不会出错!!
还有一种是对于继承类:
Class SubBase : public Base
{
public:
SubBase(SubBase& subbase);
SubBase& operator=(const SubBase& subbase);
pirvate:
int subage;
};
如果
SubBase::SubBase(SubBase &subbase)
:subage(subbase . subage) //这样做就够了吗?
{
}
SubBase& SubBase::operator=(const SubBase& subbase)
{
subage = subbase . subbase; //这样做就够了吗?
return *this;
}
如果仅仅这样,就说明了当进行Coyp构造函数时,实际上真正赋值的对象只有子类SubBase类中的subbase;而基类里面并没有实现正确赋值,因为你没有显示的调用基类的的这Copy构造函数,没有显示调用,编译器就会默认使用无参构造函数进行初始化。
调用到copy assignment函数时是对基类的所有东西不做任何操作。
怎么办?
SubBase::SubBase(SubBase &subbase)//
: Base(subbase);
,subage(subbase . subage)
{
}
SubBase& SubBase::operator=(const SubBase& subbase)
{
subage = subbase . subbase;
Base::operator=(subbase);//基类有private类型的量,无法直接调用。
return *this;
}
- c++拷贝构造函数和赋值函数注意的地方
- 【C++】拷贝构造函数和赋值函数
- c++_7: 拷贝构造函数和赋值构造函数
- C ++ 拷贝构造函数和赋值构造函数 非常经典
- 拷贝构造函数和拷贝赋值函数
- 【C/C++】拷贝构造函数和赋值函数
- 拷贝构造函数和赋值构造函数
- 拷贝构造函数和赋值构造函数
- 构造函数,拷贝构造函数,和赋值
- 赋值构造函数和拷贝构造函数
- 拷贝构造函数和赋值构造函数
- 拷贝构造函数和赋值构造函数
- 赋值构造函数和拷贝构造函数
- 拷贝构造函数和赋值构造函数
- 赋值和拷贝构造函数
- 拷贝构造和赋值函数
- 拷贝构造函数和赋值构造函数的异同
- 拷贝构造函数和赋值构造函数的异同
- JQuary注册Demo
- 恢复XML文件的默认关联
- 搜狐第二季总营收1.27亿美元 净利3090万美元-无线业务收入为1,500万美元
- Insert Sort
- dropdownlist控件 “选项”添加示例
- c++拷贝构造函数和赋值函数注意的地方
- 安装Fedora11后,修复XP启动引导
- Oracle (China) Software Systems Co., Ltd. Contact Page
- Visual Studio 2008 设计视图不响应
- {test}又一个博客
- PHP编译加载新模块
- CSS_居中_图片垂直居中
- 关于ASP中eof与bof
- JS关于输入数字验证