【学习笔记】构造函数+重载相关
一、构造函数
构造函数在创建对象的过程就会执行,带参数与不带参数,带参数的构造函数会默认将成员变量赋值传进去的参数。
class Layer {
private:
int layer_id; // 层ID
std::string layer_json; // 层的JSON配置
public:
Layer(){ }
// 构造函数实现
Layer(int layerId, const std::string& layerJson) {
layer_id = layerId; // 初始化层ID
layer_json = layerJson; // 初始化JSON配置
}
};
// 使用带参数的构造函数创建Layer对象
Layer layer(1, "{\"name\":\"background\",\"opacity\":0.8}");
// 等价于先创建对象,再赋值(但更高效)
Layer layer2;
layer2.layer_id = 1;
layer2.layer_json = "{\"name\":\"background\",\"opacity\":0.8}";
二、拷贝构造函数
拷贝构造函数的主要作用是用一个已存在的Window对象来初始化新对象。
class Window
{
public:
Window(){ }
virtual ~Window(){ }
// const:确保原对象不被修改,允许接收常量对象。
Window(const Window& obj)
{
win_id = obj.win_id;
sizeType = obj.sizeType;
type = obj.type;
zorder = obj.zorder;
isBackground = obj.isBackground;
isFreeze = obj.isFreeze;
}
..........
*默认行为:要是没有自定义拷贝构造函数,编译器会生成默认的,不过默认的是浅拷贝,这在对象管理动态资源时可能会引发问题。比如指针,浅拷贝仅复制指针值,导致多个对象指向同一块内存,析构时会引发双重释放错误。
三、赋值运算符重载
赋值运算符重载 Window& operator=(const Window& obj) 允许你使用 = 符号将一个 Window 对象的值赋给另一个 Window 对象。
class Window
{
public:
Window(){ }
virtual ~Window(){ }
Window& operator=(const Window& obj)
{
if (this == &obj) return *this; // 处理自我赋值
win_id = obj.win_id;
sizeType = obj.sizeType;
type = obj.type;
zorder = obj.zorder;
isBackground = obj.isBackground;
isFreeze = obj.isFreeze;
isLock = obj.isLock;
return *this;
}
..........
举例:
Window win1;
Window win2;
win2 = win1;
四、比较运算符重载
class Window
{
public:
Window(){ }
virtual ~Window(){ }
// 相等比较运算符的实现
bool operator==(const Window& obj) const
{
if(win_id == obj.win_id &&
sizeType == obj.sizeType &&
type == obj.type &&
zorder == obj.zorder &&
source == obj.source &&
layerout == obj.layerout &&
invalidResource == obj.invalidResource &&
layerType == obj.layerType)
return true;
else
return false;
}
// 不相等比较运算符的实现
bool operator!=(const Window& obj) const
{
return !operator==(obj);
}
..........
举例:
Window win1;
Window win2;
win2 = win1;
if(win1 == win2)
{
........
}