第9讲拷贝构造函数及对象成员 教学目的与要求: 了解对象的初始化及深拷贝和浅拷贝 掌握拷贝构造函数的定义和使用及含有对象成员类的 定义和使用。 教学内容提要: 1、拷贝构造函数; 2、对象成员 教学重点:拷贝构造函数的定义和使用。 教学难点:含有对象成员类的定义和使用 教学进度:P71~P73,P97~P99 教学过程
•教学目的与要求: 了解对象的初始化及深拷贝和浅拷贝。 掌握拷贝构造函数的定义和使用及含有对象成员类的 定义和使用。 •教学内容提要: 1、 拷贝构造函数; 2、对象成员; 教学重点:拷贝构造函数的定义和使用。 •教学难点:含有对象成员类的定义和使用。 •教学进度:P71~P73, P97~P99 •教学过程: 第 9 讲 拷贝构造函数及对象成员
(91拷贝构造函数】 1为什么要引入拷贝构造函数? int x=10: Int y-x; student zh(“ zhang”,’m’,20); student i=zh: 当用一个对象去初始化同类的另一个对象时需要调用 拷贝构造函数,为创建的对象申请所需的内存空间, 并已知对象的数据成员去初始化该对象的数据成员。 2拷贝构造函数定义 拷贝构造函数:函数名与类名相同,没有返回类型, 且只能有一个对该类对象的引用的参数的成员函数
1.为什么要引入拷贝构造函数? 2.拷贝构造函数定义 int x=10; int y=x; student zh(“zhang”,’m’,20); student li=zh; 当用一个对象去初始化同类的另一个对象时需要调用 拷贝构造函数,为创建的对象申请所需的内存空间, 并已知对象的数据成员去初始化该对象的数据成员。 【9.1 拷贝构造函数】 拷贝构造函数:函数名与类名相同,没有返回类型, 且只能有一个对该类对象的引用的参数的成员函数
格式:<类名>:<拷贝构造函数名>(<类名>&<引用名> 函数体} Ba]: student: student(student p) strcpy(name p name); sexpsex, age-page
格式:<类名>::< 拷贝构造函数名>(<类名> &<引用名>) { 函数体} 例: student :: student(student & p) { strcpy(name , p.name); sex=p.sex; age=p.age; }
3拷贝构造函数的调用时刻: 个对象去初始化另一个对象时,系统会自动调 用拷贝构造函数。 概括起来有三种场合: 1)、声明并初始化对象变量时; 2)、对象作为函数参数时; 3)、对象作为函数返回值时;
3. 拷贝构造函数的调用时刻: 一个对象去初始化另一个对象时,系统会自动调 用拷贝构造函数。 概括起来有三种场合: • 1)、声明并初始化对象变量时; • 2)、对象作为函数参数时; • 3)、对象作为函数返回值时;
例9.1 Tpiont: Piont(Piont include <iostream.h> &p) class Piont i x-p.X, y-p y cout<<”copy public: constrictor called\n”; Piont(int ix, int iy) void funI(Piont q) XIX 9 y=ly, cout<<"In function cout<” constructor called\n”,; funl(n”; Piont(piont p) Piont( Piont fun20 {cout<“ Destructorcalled\n”;} i Piont T(10, 20) int xcordo return x; j return T int ycordo i return y private: int x, y;
#include <iostream.h> class Tpiont { public: Tpiont(int ix, int iy) { x=ix ; y=iy; cout<<”constructor called\n”; } Tpiont(Tpiont & p); ~Tpiont() { cout<< “Destructorcalled\n”; } int xcord() {return x; } int ycord() {return y; } private: int x, y; }; Tpiont::Tpiont(Tpiont & p) { x=p.x; y=p.y; cout<<”copy constrctor called\n”; } void fun1(Tpiont q) { cout<<”In functiont fun1()\n”; } Tpiont fun2() { Tpiont T(10,20); return T; } 例 9.1