C++中赋值函数和拷贝构造函数(举例说明)
2016-04-21 15:49
351 查看
拷贝构造函数发生在对象还没有创建,需要创建时
如: MyClass obj1(1);
MyClassobj3 = obj1;
赋值操作符重载仅发生在对象已经执行过构造函数,即已经创建的情况下
如:
MyClass obj1(1);
MyClass obj3;
obj3 = obj1;
具体代码如下:
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3;
obj3 = obj1;
return 0;
}
输出:1203444
先创建对象obj1,调用构造函数并初始化为1,输出1
再创建对象obj2,调用构造函数并初始化为2,输出2
创建对象obj3,调用构造函数,使用默认值为0,输出0
obj1赋值给obj3时,调用赋值函数,输出3
再依次析构,析构的顺序和调用构造的顺序相反
先析构obj3,在析构obj2,最后析构obj1
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3 = obj1;
return 0;
}
输出:122444
依次创建对象obj1,obj2,调用两次构造,分别输出初始化的值1,2
MyClass obj3 = obj1;由于赋值的时候obj3还没有创建,所以会调用拷贝构造函数,输出2
再依次析构三个对象
如: MyClass obj1(1);
MyClassobj3 = obj1;
赋值操作符重载仅发生在对象已经执行过构造函数,即已经创建的情况下
如:
MyClass obj1(1);
MyClass obj3;
obj3 = obj1;
具体代码如下:
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3;
obj3 = obj1;
return 0;
}
输出:1203444
先创建对象obj1,调用构造函数并初始化为1,输出1
再创建对象obj2,调用构造函数并初始化为2,输出2
创建对象obj3,调用构造函数,使用默认值为0,输出0
obj1赋值给obj3时,调用赋值函数,输出3
再依次析构,析构的顺序和调用构造的顺序相反
先析构obj3,在析构obj2,最后析构obj1
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3 = obj1;
return 0;
}
输出:122444
依次创建对象obj1,obj2,调用两次构造,分别输出初始化的值1,2
MyClass obj3 = obj1;由于赋值的时候obj3还没有创建,所以会调用拷贝构造函数,输出2
再依次析构三个对象
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#拷贝文件简单实现方法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解