- 11
- 0
- 约8.46千字
- 约 31页
- 2017-07-05 发布于湖北
- 举报
注意: 如果一个类中没有定义拷贝构造函数,则系统自动生成一个缺省拷贝构造函数,其功能是将已知对象的所有数据成员的值拷贝给对应对象的数据成员。 class A { float x, y; public: A(float a, float b) { x=a; y=b; cout调用了构造函数\n; } void Print() { coutx\tyendl; } }; 调用了构造函数 1.0 2.0 1.0 2.0 1.0 2.0 拷贝构造函数举例 class Point { public: Point(int xx=0,int yy=0){X=xx; Y=yy;} Point(Point p); int GetX() {return X;} int GetY() {return Y;} private: int X,Y; }; Point::Point (Point p) { X=p.X; Y=p.Y; cout拷贝构造函数被调用endl; } 拷贝构造函数调用 (1)当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。 void main(void) { Point A(1,2); Point B(A); //拷贝构造函数被调用 coutB.GetX()endl; } (2)若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如: void fun1(Point p) { coutp.GetX()endl; } void main() { Point A(1,2); fun1(A); //调用拷贝构造函数 } (3)当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如: Point fun2() { Point A(1,2); return A; //调用拷贝构造函数 } void main() { Point B; B=fun2(); } 注意: 如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。 这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。 构造函数和析构函数举例 #includeiostream using namespace std; class Point { public: Point(int xx,int yy); ~Point(); //...其它函数原形 private: int X,int Y; }; Point::Point(int xx,int yy) { X=xx; Y=yy; } Point::~Point() { } //...其它函数的实现略 类的应用举例 一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。 组合的概念 类中的成员数据是另一个类的对象。 可以在已有的抽象的基础上实现更复杂的抽象。 通过对复杂对象进行分解、抽象,使我们能够将一个复杂对象理解为简单对象的组合;分解得到复杂对象的部件对象,这些部件对象比它高层的复杂对象更容易理解和实现,然后由这些部件对象了“装配”复杂对象 举例 class Point { private: float x,y; //点的坐标 public: Point(float h,float v); //构造函数 float GetX(void); //取X坐标 float GetY(void); //取Y坐标 void Draw(void); //在(x,y)处画点 }; //...函数的实现略 类组合的构造函数设计 原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。 声明形式: 类名::类名(对象成员所需的形参,本类成员形参) :对象1(参数),对象2(参数),...... { 本类初始化 } 类组合的构造函数调用 构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反) 若调用默认构造函数(即无形参的),则内嵌对象的初始化也将调用相应的默认构造函数。 类的组合举例1 #include iostr
原创力文档

文档评论(0)