北大青鸟 c 第四章 特殊的函数 Ⅴ ersion3.0 CHA
Version 3.0 特殊的函数 第四章
回顾 类 成员变量 成员函数 thi指针 对象数组 北大青鸟
2 回顾 • 类 • 成员变量 • 成员函数 • this 指针 • 对象数组
目标 复制构造函数 ·复制赋值操作符 类型转换构造函数 类型转换函数 北大青鸟
3 目标 • 复制构造函数 • 复制赋值操作符 • 类型转换构造函数 • 类型转换函数
复制构造函数31 在下列情况,会调用复制构造函数 将某个对象初始化为类的另一个对象时 将对象当作参数传递给函数时 函数返回对象时 北大青鸟
4 复制构造函数 3-1 • 在下列情况,会调用复制构造函数 – 将某个对象初始化为类的另一个对象时 – 将对象当作参数传递给函数时 – 函数返回对象时
复制构造函数32 如果没有定义复制构造函数,编译器将自 动生成一个 自动生成的复制构造函数只是将对象内容 逐个字节地copy 当数据成员有指针时,将导致两个对象的 指针指向同一个地址 北大青鸟
5 复制构造函数 3-2 • 如果没有定义复制构造函数,编译器将自 动生成一个 • 自动生成的复制构造函数只是将对象内容 逐个字节地copy • 当数据成员有指针时,将导致两个对象的 指针指向同一个地址
复制构造函数33 定义 以对象的引用作为参数的构造函数 X:: X(X &ptr 或 X:: X(const x &ptr) 使用 const关键字,可以确保复制过程不会 意外地更改源对象 6 北大青鸟
6 复制构造函数 3-3 • 定义 以对象的引用作为参数的构造函数 X::X(X &ptr) 或 X::X(const X &ptr) • 使用 const 关键字,可以确保复制过程不会 意外地更改源对象
赋值操作符41 默认的赋值操作符只是逐个字节地将源对 象复制到目标对象 #include void main o class varl int ptr; vax1s1(20); public: Var1 s2 Vario i s2.sh。w(); ptr new inti 2 s1 七r s2.sh。w() Varl (int i)[ p七r new ln七 ptr=工 s2的ptr和s1的ptr void show ( 到同一个 cout < *ptr < endli 北大青鸟
7 赋值操作符 4-1 • 默认的赋值操作符只是逐个字节地将源对 象复制到目标对象 #include class Var1 { int * ptr; public: Var1() { ptr = new int; *ptr = 0; } Var1(int i) { ptr = new int; *ptr = i; } void show () { cout << *ptr << endl; } }; void main() { Var1 s1(20); Var1 s2; s2.show(); s2 = s1; s2.show(); } s2的ptr和s1的ptr 指到同一个位 置
赋值操作符42 演示默认的赋值操作符 北大青鸟
8 赋值操作符 4-2 演示默认的赋值操作符
赋值操作符43 增加 Varl operator =(const Varl s *ptr *(s ptr)i return *this 两个对象的pt指向不同的位置 北大青鸟
9 赋值操作符 4-3 增加: Var1 & operator = (const Var1 & s) { *ptr = *(s.ptr); return *this; } • 两个对象的ptr指向不同的位置
赋值操作符44 演示自定义赋值操作符 北大青鸟
10 赋值操作符 4-4 演示自定义赋值操作符