《类和对象(一)ppt课件.ppt》由会员分享,可在线阅读,更多相关《类和对象(一)ppt课件.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分3.1.1 从结构到类从结构到类 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.1有关日期结构的例子。有关日期结构的例子。#include struct Date int year; int month; int day;main() Date date1; date1.year=2003; date1.month=8; date1.day=25; coutdat
2、e1.year.date1.month.date1.dayendl; return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分类声明的一般格式如下类声明的一般格式如下:class class 类名类名 public:public: 公有数据成员公有数据成员; ; 公有成员函数公有成员函数; ;protected:protected: 保护数据成员保护数据成员; ; 保护成员函数保护成员函数; ;private:private: 私有数据成员私有数据成员; ; 私有成员函数私有成员函数; ; ;
3、;变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分用一个类来描述日期用一个类来描述日期, ,其形式如下其形式如下: :class Date class Date public: public: void setDate(int y,int m,int d); void setDate(int y,int m,int d); void showDate(); void showDate(); private: private: int year; int year; int month; int month;
4、 int day; int day;变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 成员函数的声明通常采用以下两种方式成员函数的声明通常采用以下两种方式: : (1) (1) 将成员函数以普通函数的形式进将成员函数以普通函数的形式进行说明行说明, ,这种成员函数在类外定义的一般这种成员函数在类外定义的一般形式是形式是: : 返回类型返回类型 类名类名成员函数名成员函数名( (参数表参数表) ) / / 函数体函数体 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电
5、站的主接线是电力系统接线组成中一个重要组成部分 例如例如, , 以下是表示坐标点的类以下是表示坐标点的类CoordCoord的声明。的声明。 class Coord class Coord public: public: void setCoord (int,int); / void setCoord (int,int); / 设置坐标点设置坐标点 int getx(); / int getx(); / 取取x x坐标点坐标点 int gety(); / int gety(); / 取取y y坐标点坐标点 private:private: int x,y; int x,y; ; ; void
6、CoordsetCoord(int a,int b) x=a; y=b; void CoordsetCoord(int a,int b) x=a; y=b; int Coord:getx() return x; int Coord:getx() return x; int Coord:gety() return y; int Coord:gety() return y; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 (2) (2) 将成员函数以内联函数的形式进将成员函数以内联函数的形式进行说明。在行说明
7、。在C+C+中中, ,可以用下面两种格式可以用下面两种格式将成员函数声明为类的内联函数将成员函数声明为类的内联函数: : 隐式声明隐式声明 直接将函数声明在类内部。直接将函数声明在类内部。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 例如例如: : class Coord class Coord public: public: void setCoord(int a,int b) void setCoord(int a,int b) x=a; y=b; x=a; y=b; int getx() int
8、 getx() return x; return x; int gety() int gety() retrun y; retrun y; private: private: int x,y; int x,y; ; ;变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 显式声明显式声明 这种成员函数在类外定义的一般形式是这种成员函数在类外定义的一般形式是: :inline inline 返回类型返回类型 类名类名:成员函数名成员函数名( (参数表参数表) ) / / 函数体函数体 变电站电气主接线是指变电站的
9、变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例如上面的例子改为显式声明可变成如下形式例如上面的例子改为显式声明可变成如下形式: :class Coordclass Coord public: public: void setCoord(int,int); void setCoord(int,int); int getx(); int getx(); int gety(); int gety(); private: private: int x,y; int x,y; ; ; inline void Coord:setCoord(i
10、nt a,int b) x=a; inline void Coord:setCoord(int a,int b) x=a; y=b;y=b; inline int Coord:getx() return x; inline int Coord:getx() return x; inline int Coord:gety() return y; inline int Coord:gety() return y; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 3.3.1 3.3.1 类与对象的关系类与对象的
11、关系 通常我们把具有共同属性和行为的事通常我们把具有共同属性和行为的事物所构成的集合叫做类。物所构成的集合叫做类。 在在C+C+中中, ,可以把相同数据结构和相可以把相同数据结构和相同操作集的对象看成属于同一类。同操作集的对象看成属于同一类。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分(1(1)在声明类的同时)在声明类的同时, ,直接定义对象直接定义对象, ,即在声明类即在声明类的右花括号的右花括号“”后后, ,直接写出属于该类的对象直接写出属于该类的对象名表。例如名表。例如: : class Coo
12、rd class Coord public: public: void setCoord(int,int); void setCoord(int,int); int getx(); int getx(); int gety(); int gety(); private: private: int x,y; int x,y; op1,op2; op1,op2; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分(2 2)声明了类之后)声明了类之后, ,在使用时再定义对象在使用时再定义对象, ,定义的格定义的格式
13、与一般变量的定义格式相同式与一般变量的定义格式相同, ,例如例如: : class Coord class Coord / / ; ; / / main() main() Coord op1,op2; Coord op1,op2; / / 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 在类的外部可以通过类的对象进行访在类的外部可以通过类的对象进行访问问, ,访问的一般形式是访问的一般形式是: : 对象名对象名. .数据成员名数据成员名或或 对象名对象名. .成员函数名成员函数名( (参数表参数表) )
14、其中其中“.”.”叫做对象选择符叫做对象选择符, ,简称点运简称点运算符。算符。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.2 使用类使用类Coord的完整程序。的完整程序。 #include class Coord public: void setCoord(int a,int b) x=a; y=b; int getx() return x; int gety() return y; private: int x,y; ;void main() Coord op1; int i,j; op
15、1.setCoord(5,6); / 调用调用op1的的setCoord(),初始化对象初始化对象op1 i=op1.getx(); / 调用调用op1的的getx(),取取op1的的x值值 j=op1.gety(); / 调用调用op1的的gety(),取取op1的的y值值 coutop1 i= i op1 j= jendl; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 类成员有三种访问属性类成员有三种访问属性: :公有(公有(publicpublic)、)、私有(私有(privateprivate
16、)和保护()和保护(protectedprotected)。)。 说明为公有的成员不但可以被类中成员函说明为公有的成员不但可以被类中成员函数访问数访问; ;还可在类的外部还可在类的外部, ,通过类的对象进行访通过类的对象进行访问。问。 说明为私有的成员只能被类中成员函数访说明为私有的成员只能被类中成员函数访问问, ,不能在类的外部不能在类的外部, ,通过类的对象进行访问。通过类的对象进行访问。 说明为保护的成员除了类本身的成员函数说明为保护的成员除了类本身的成员函数可以访问外可以访问外, ,该类的派生类的成员也可以访问该类的派生类的成员也可以访问, ,但不能在类的外部但不能在类的外部, ,通过
17、类的对象进行访问。通过类的对象进行访问。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 例例3.5 3.5 用对象赋值语句的例子。用对象赋值语句的例子。 #include#include class abc class abc public:public: void init(int i,int j) a=i; b=j; void init(int i,int j) a=i; b=j; void show() couta bendl; void show() couta bendl; private:p
18、rivate:I nt a,b;I nt a,b; ; ;main()main() abc o1,o2; abc o1,o2; o1.init(12,34); o1.init(12,34); o2=o1; / o2=o1; / 将对象将对象o1o1数据成员的值赋给对象数据成员的值赋给对象o2o2 o1.show(); o1.show(); o2.show(); o2.show(); return 0; return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 所谓类的作用域就是指在类声明中的所谓
19、类的作用域就是指在类声明中的一对花括号所形成的作用域。一对花括号所形成的作用域。 一个类的所有成员都在该类的作用域一个类的所有成员都在该类的作用域内内,一个类的任何成员可以访问该类的其他一个类的任何成员可以访问该类的其他成员。成员。 而在类的外部而在类的外部,对该类的数据成员和成对该类的数据成员和成员函数的访问则要受到一定的限制员函数的访问则要受到一定的限制,有时甚有时甚至是不允许的至是不允许的,这体现了类的封装功能。这体现了类的封装功能。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.6 理解类
20、的作用域。理解类的作用域。 # include class myclass public: int i; void init(int); void show() cout“i=”iendl; / 可以访问类中的可以访问类中的 数据成员数据成员i ; void myclass:init(int si) i=si; / 可以访问类中的数据成员可以访问类中的数据成员i int fun() return i; / 非法非法,不能直接访问类中的不能直接访问类中的i void main() myclass ob; ob.init(5); / 给数据成员给数据成员i赋初值赋初值5 ob.show(); i=
21、8; / 非法非法,不能直接访问类中的不能直接访问类中的i,可改写成可改写成ob.i=8 ob.show(); 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 构造函数和析构函数都是类的成员函构造函数和析构函数都是类的成员函数数, ,但它们都是特殊的成员函数但它们都是特殊的成员函数, ,执行特执行特殊的功能殊的功能, ,不用调用便自动执行不用调用便自动执行, ,而且这而且这些函数的名字与类的名字有关。些函数的名字与类的名字有关。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输
22、配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 构造函数是一种特殊的成员函数构造函数是一种特殊的成员函数,它主要用于为对它主要用于为对象分配空间象分配空间,进行初始化。构造函数具有一些特殊的性进行初始化。构造函数具有一些特殊的性质质: (1) 构造函数的名字必须与类名相同。构造函数的名字必须与类名相同。 (2) 构造函数可以有任意类型的参数构造函数可以有任意类型的参数,但不能指定返但不能指定返回类型。它有隐含的返回值回类型。它有隐含的返回值,该值由系统内部使用。该值由系统内部使用。 (3) 构造函数是特殊的成员函数构造函数是特殊的成员函数,函数体可写在类体函数体可写在类体内内,也
23、可写在类体外。也可写在类体外。 (4) 构造函数可以重载构造函数可以重载,即一个类中可以定义多个参即一个类中可以定义多个参数个数或参数类型不同的构造函数。数个数或参数类型不同的构造函数。 (5) 构造函数被声明为公有函数构造函数被声明为公有函数,但它不能像其他成但它不能像其他成员函数那样被显式地调用员函数那样被显式地调用,它是在定义对象的同时被调它是在定义对象的同时被调用的。用的。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.7 为类为类Date建立一个构造函数。建立一个构造函数。#includ
24、e class Date public: Date(int y,int m,int d); / 构造函数构造函数 void setDate(int y,int m,int d); void showDate(); private: int year, month, day; ;Date:Date(int y,int m,int d) / 构造函数的实现构造函数的实现 year=y; month=m; day=d; void Date:setDate(int y,int m,int d) year=y; month=m; day=d; inline void Date:showDate() co
25、utyear.month.dayendl; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 (1) 利用构造函数直接创建对象利用构造函数直接创建对象.其一般其一般形式为形式为: 类名类名 对象名对象名(实参表实参表); 这里的这里的“类名类名”与构造函数名相同与构造函数名相同,“实实参表参表”是为构造函数提供的实际参数。是为构造函数提供的实际参数。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.8 利用构造函
26、数直接创建对象。利用构造函数直接创建对象。#include class Date / 省略,同例3.7; / 省略,同例3.7void main() Date date1(1998,4,28); / 定义类Date的对象date1, / 自动调用date1的构造函数,初始化对象date1 coutDate1 output1:endl; date1.showDate(); / 调用date1的showDate(),显示date1的数据 date1.SetDate(2002,11,14); / 调用date1的setDate(), / 重新设置date1的数据 coutDate1 output2:
27、endl; date1.showDate(); / 调用date1的showDate(),显示date1的数据变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分(2) 利用构造函数创建对象时利用构造函数创建对象时,通过指针和通过指针和new来实现。其一般语法形式为来实现。其一般语法形式为: 类名类名 *指针变量指针变量 = new 类名类名(实参表实参表); 例如例如: Date *date1=new Date(1998,4,28);就创建了对象就创建了对象(*date1)。 变电站电气主接线是指变电站的变压
28、器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 将例将例3.8的主函数改成用这种方法来实现的主函数改成用这种方法来实现,其运行结果与原例题其运行结果与原例题完全相同。完全相同。void main() Date *date1; date1=new Date(1998,4,28); / 以上两条语句可合写成以上两条语句可合写成:Date *date1=new Date(1998,4,28); coutDate1 output1:showDate(); date1-setDate(2002,11,14); coutDate1 output2:
29、showDate(); delete date1;变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分带有成员初始化表的构造函数的一般形式如下带有成员初始化表的构造函数的一般形式如下:类名类名:构造函数名构造函数名(参数表参数表):(成员初始化表成员初始化表) / 构造函数体构造函数体成员初始化表的一般形式为成员初始化表的一般形式为: 数据成员名数据成员名1(初始值初始值1),数据成员名数据成员名2(初始值初始值2), 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站
30、的主接线是电力系统接线组成中一个重要组成部分例例3.9 成员初始化表的使用。成员初始化表的使用。#includeclass Apublic:A(int x1):x(x1),rx(x),pi(3.14) / rx(x)相当于相当于rx=x , / pi(3.14)相当于相当于pi=3.14void print() coutx=x rx=rx pi=pi; private:int x; int& rx; const float pi;main() A a(10); a.print(); return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站
31、的主接线是电力系统接线组成中一个重要组成部分 例例3.11 #include class Coord public: Coord(int a=0,int b=0) x=a; y=b; / 带有缺省参数的构造函数带有缺省参数的构造函数 int getx() return x; int gety() return y; private: int x,y; ; void main() Coord op1(5,6); Coord op2(5); Coord op3; int i,j; i=op1.getx();j=op1.gety(); coutop1 i= i op1 j= jendl; i=op2
32、.getx();j=op2.gety(); coutop2 i= i op2 j= jendl; i=op3.getx();j=op3.gety(); coutop3 i= i op3 j= jendl; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 析构函数也是一种特殊的成员函数。它执行与构析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作造函数相反的操作,通常用于撤消对象时的一些清通常用于撤消对象时的一些清理任务理任务,如释放分配给对象的内存空间等。如释放分配给对象的内存空间等。 析构函数有
33、以下一些特点析构函数有以下一些特点: 析构函数与构造函数名字相同析构函数与构造函数名字相同,但它前面必但它前面必须加一个波浪号须加一个波浪号(); 析构函数没有参数析构函数没有参数,也没有返回值也没有返回值,而且不能而且不能重载。因此在一个类中只能有一个析构函数重载。因此在一个类中只能有一个析构函数; 当撤消对象时当撤消对象时,编译系统会自动地调用析构函编译系统会自动地调用析构函数。数。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 例3.12 重新说明类Date。#include class Date
34、 public: Date(int y,int m,int d); / 构造函数 Date(); / 析构函数 void setDate(int y,int m,int d); void showDate(); private: int year, month, day;Date:Date(int y,int m,int d) / 构造函数的实现 coutconstructing.endl; year=y; month=m; day=d; Date:Date() / 析构函数的实现 coutdestruting.endl;void Date:setDate(int y,int m,int d)
35、 year=y;month=m;day=d; inline void Date:showDate() coutyear.month.dayendl; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分void main() Date date1(1998,4,28); / 定义类定义类Date的对象的对象date1, / 调用调用date1的构造函数的构造函数,初始化对象初始化对象date1 coutDate1 output1:endl; date1.showDate(); / 调用调用date1的的show
36、Date(),显示显示date1的数据的数据 date1.setDate(2002,11,14); / 调用调用date1的的setDate(), / 重新设置重新设置date1的数据的数据 coutDate1 output2:endl; date1.showDate(); / 调用调用date1的的showDate(),显示显示date1的数据的数据变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分1. 缺省的构造函数缺省的构造函数 在实际应用中,如果没有给类定义构造函数,则编译系统自动地生成一个缺省的构造
37、函数。其格式如下: 类名:缺省构造函数名( ) 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 2. 缺省的析构函数缺省的析构函数 每个类必须有一个析构函数。若没有每个类必须有一个析构函数。若没有显式地为一个类定义析构函数显式地为一个类定义析构函数,编译系统编译系统会自动地生成一个缺省的析构函数会自动地生成一个缺省的析构函数,其格其格式如下式如下: 类名类名:析构函数名析构函数名( ) 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中
38、一个重要组成部分例例3.17 重载构造函数应用例程。重载构造函数应用例程。#include class Date public:Date(); / 无参数的构造函数无参数的构造函数 Date(int y,int m,int d); / 带有参数的构造函数带有参数的构造函数 void showDate(); private: int year, month, day;Date:Date() year=1998; month=4; day=28; Date:Date( int y, int m, int d) year=y; month=m; day=d; inline void Date:sho
39、wDate() coutyear.month.dayendl; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用。其作用是使用一个已经存在的对象去初始化另一个同类的对象。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 拷贝构造函数具有以下特点拷贝构造函数具有以下特点: : (1) (1) 因为该函数也是一种构造函数因为该函数也是一种构造函数, ,所以其函数所以
40、其函数名与类名相同名与类名相同, ,并且该函数也没有返回值类型。并且该函数也没有返回值类型。 (2) (2) 该函数只有一个参数该函数只有一个参数, ,并且是同类对象的引并且是同类对象的引用。用。 (3) (3) 每个类都必须有一个拷贝构造函数。程序每个类都必须有一个拷贝构造函数。程序员可以根据需要定义特定的拷贝构造函数员可以根据需要定义特定的拷贝构造函数, ,以实以实现同类对象之间数据成员的传递。如果程序员没现同类对象之间数据成员的传递。如果程序员没有定义类的拷贝构造函数有定义类的拷贝构造函数, ,系统就会自动生成产系统就会自动生成产生一个缺省的拷贝构造函数。生一个缺省的拷贝构造函数。变电站
41、电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 1. 自定义拷贝构造函数自定义拷贝构造函数 自定义拷贝构造函数的一般形式如下自定义拷贝构造函数的一般形式如下: 类名类名:类名(类名类名(类名& 对象名)对象名) / 拷贝构造函数的函数体拷贝构造函数的函数体 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分例例3.19 自定义拷贝构造函数的使用。自定义拷贝构造函数的使用。#includeclass Coordpublic: C
42、oord(int a,int b) / 构造函数构造函数 x=a; y=b; coutUsing normal constructorn; Coord(const Coord& p) / 拷贝构造函数拷贝构造函数 x=2*p.x; y=2*p.y; coutUsing copy constructorn; void print() coutx yendl; private: int x,y; ;main() Coord p1(30,40); / 定义对象定义对象p1,调用了普通的构造函数调用了普通的构造函数 Coord p2(p1); / 以以“代入代入”法调用拷贝构造函数法调用拷贝构造函数,
43、 用对象用对象p1初始化对象初始化对象p2 p1.print(); p2.print(); return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 如果没有编写自定义的拷贝构造函如果没有编写自定义的拷贝构造函数数,C+会自动地将一个已存在的对象复会自动地将一个已存在的对象复制给新对象制给新对象,这种按成员逐一复制的过程这种按成员逐一复制的过程由是缺省拷贝构造函数自动完成的。由是缺省拷贝构造函数自动完成的。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变
44、电站的主接线是电力系统接线组成中一个重要组成部分例例3.20 调用缺省的拷贝构造函数。调用缺省的拷贝构造函数。#includeclass Coordpublic: Coord(int a,int b) x=a; y=b; coutUsing normal constructorn; void print() coutx yendl;private: int x,y; ;main() Coord p1(30,40); / 定义类定义类Coord的对象的对象p1, / 调用了普通构造函数初始化对象调用了普通构造函数初始化对象p1 Coord p2(p1); / 以以“代入代入”法调用缺省的拷贝构造
45、函数法调用缺省的拷贝构造函数, / 用对象用对象p1初始化对象初始化对象p2 Coord p3=p1; / 以以“赋值赋值”法调用缺省的拷贝构造函数法调用缺省的拷贝构造函数, / 用对象用对象p1初始化对象初始化对象p3 p1.print(); p2.print(); p3.print(); return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 (1) 当用类的一个对象去初始化该类的另一个对当用类的一个对象去初始化该类的另一个对象时。象时。 如例如例3.20主函数主函数main()中的下述语
46、句中的下述语句:Coord p2(p1); / 用对象用对象p1初始化对象初始化对象p2, 拷贝构造函数被调用拷贝构造函数被调用(代入法代入法)Coord p3=p1; / 用对象用对象p1初始化对象初始化对象p3, 拷贝构造函数被调用拷贝构造函数被调用(赋值法赋值法) 这时需要调用拷贝构造函数。这时需要调用拷贝构造函数。 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分 (2) 当函数的形参是类的对象当函数的形参是类的对象,调用函数调用函数,进行形参和实参结进行形参和实参结合时。例如合时。例如: / fu
47、n1(Coord p) / 函数的形参是类的对象函数的形参是类的对象 p.print(); main() Coord p1(10,20); fun1(p1); / 当调用函数当调用函数,进行形参和实参结合时进行形参和实参结合时, 调用拷贝构造函数调用拷贝构造函数 return 0; 变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分(3) 当函数的返回值是对象当函数的返回值是对象,函数执行完成函数执行完成,返回调用者时。例返回调用者时。例如如:/ Coord fun2() Coord p1(10,30); return p1; / 函数的返回值是对象函数的返回值是对象main() Coord p2; P2=fun2(); / 函数执行完成函数执行完成,返回调用者时返回调用者时, 调用拷贝构造函数调用拷贝构造函数 return 0;