4.2---Point类的完整程序

例题1:

    (1)主要思路

      ①先定义一个Point类,添加Point类的各种属性和行为(函数)。

      ②完成三种拷贝构造函数调用情况的测试

    (2)流程图

    (3)伪代码

      class Point(int xx=0,int yy=0){}

      Point::point(Point &p)    //调用的第一种情况  构造函数

      void fun1(Point p);       //调用的第二种情况   作为形参

      Point fun2();           //调用的第三种情况    作为函数的返回值类型

    (4)代码

 1 #include <iostream>
 2 using namespace std;
 3 class Point
 4 {
 5 public:
 6     Point(int xx = 0, int yy = 0)
 7     {
 8         x = xx;
 9         y = yy;
10     }
11     Point(Point& p);  //声明
12     int getX()
13     {
14         return x;
15     }
16     int getY()
17     {
18         return y;
19     }
20 private:
21     int x, y;
22 };
23 Point::Point(Point& p)         //第一种情况   拷贝构造函数
24 {
25     x = p.x;
26     y = p.y;
27     cout << "拷贝构造函数的调用" << endl;
28 }
29 void fun1(Point p)             //第二种情况   作为形参
30 {
31     cout << p.getX() << endl;
32 }
33 Point fun2()                   //第三种情况  作为返回值类型
34 {
35     Point a(1, 2);
36     return a;
37 }
38 int main()
39 {
40     Point a(4, 5);
41     Point b = a;      //第一种情况
42     cout << b.getX() << endl;
43     fun1(b);       //第二种情况 b作为fun1的实参
44     b = fun2();   //第三种情况 返回值为类对象
45     cout << b.getX() << endl;
46     return 0;
47 }

  (5)总结

    ①类的拷贝构造函数的调用情况有三种

      1.用一个类对象给另一个类对象赋值

      2.类对象作为函数的形参出现

      3.类对象作为函数的范围值类型时

    ②注意

      当类的数据成员中有指针类型时,默认的拷贝构造函数实现的只能是浅拷贝,浅拷贝会带来数据安全方面的隐患,要实现正确的复制,也就是深拷贝,必须编写拷贝构造函数,即需要程序员手动编写拷贝构造函数来实现。

 

posted @ 2023-04-11 19:39  连师傅只会helloword  阅读(162)  评论(0)    收藏  举报