拷贝构造函数和赋值表达式

简介: 1、用一个已存在的对象去构造一个不存在的对象(构造之前不存在),就是拷贝构造。用一个已存在的对象去覆盖另一个已存在的对象,就是赋值运算。 String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝构造函数 拷贝构造函数将在对象传值,返回值,抛出异常中被调用。

1、用一个已存在的对象去构造一个不存在的对象(构造之前不存在),就是拷贝构造。用一个已存在的对象去覆盖另一个已存在的对象,就是赋值运算。

String(const char *str = NULL);// 普通构造函数

String(const String &other); // 拷贝构造函数

拷贝构造函数将在对象传值,返回值,抛出异常中被调用。

2、“引用”不可能是NULL,而“指针”可以为NULL

注意函数strlen返回的是有效字符串长度,不包含结束符‘\0’。函数strcpy则连‘\0’一起复制。

3、应该为所有包含动态分配成员的类都提供拷贝构造函数,析构函数,赋值运算符。

4、拷贝构造函数与赋值运算符

A b=a;   //拷贝构造函数调用

A b(a);   //拷贝构造函数调用

b =a;   //赋值运算符调用

5、对于一个类X, 如果一个构造函数的第一个参数是下列之一:

a) X&

b) const X&

c) volatile X&

d) const volatile X&

且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数。

原文:

http://blog.csdn.net/lwbeyond/article/details/6202256

http://blog.163.com/zhoumhan_0351/blog/static/39954227201032845132592/

http://baike.baidu.com/view/1266959.htm

目录
相关文章
|
5月前
|
C++
35 C++ - 指针运算符(*、->)重载
35 C++ - 指针运算符(*、->)重载
32 0
|
4月前
通过c字符串对拷贝构造和赋值构造进行了解
通过c字符串对拷贝构造和赋值构造进行了解
20 0
|
5月前
|
编译器 C++
36 C++ - 赋值(=)运算符重载
36 C++ - 赋值(=)运算符重载
20 0
|
10月前
|
人工智能 Shell
将结果分别赋值给变量
将结果分别赋值给变量
48 0
|
11月前
12-赋值运算符重载
12-赋值运算符重载
|
API C++ Windows
c++中给LPCSTR赋值
c++中给LPCSTR赋值
|
编译器 C++
<C++>运算符重载完结,详解赋值,关系,函数调用运算符
<C++>运算符重载完结,详解赋值,关系,函数调用运算符
109 0
<C++>运算符重载完结,详解赋值,关系,函数调用运算符
|
编译器 C++
C++运算符重载(四)之赋值运算符重载
赋值运算符重载 c++编译器至少给一个类添加4个函数 1. 默认构造函数(无参,函数体为空) 2. 默认析构函数(无参,函数体为空) 3. 默认拷贝构造函数,对属性进行值拷贝 4. 赋值运算符 operator=, 对属性进行值拷贝 如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题 示例:
98 1
C++运算符重载(四)之赋值运算符重载
|
编译器 C++
C++赋值运算符要返回*this的引用
C++赋值运算符要返回*this的引用
207 0
|
存储 Unix PHP
变量的引用赋值与传值赋值
一、使用 memory_get_usage() 查看PHP内存使用量 1. 传值赋值
 变量的引用赋值与传值赋值