zoukankan      html  css  js  c++  java
  • C++专题(二)

    10.分析下列程序的执行结果.

    头文件:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Point
     6 {
     7     float x, y;
     8 
     9 public:
    10     Point()
    11     {
    12         x = 0;
    13         y = 0;
    14         cout << "执行Point()构造函数" << endl;
    15     }
    16 
    17     Point(float a, float b)
    18     {
    19         x = a;
    20         y = b;
    21         cout << "执行Point(float a, float b)构造函数" << endl;
    22     }
    23 
    24     ~Point()
    25     {
    26         cout << '(' << x << ',' << y << ")执行析构函数" << endl;
    27     }
    28 
    29     void Set(float a = 0, float b = 0)
    30     {
    31         x = a;
    32         y = b;
    33     }
    34 
    35     void Display()
    36     {
    37         cout << "点的位置是:(" << x << ',' << y << ")" << endl;
    38     }
    39 };
    point.h

    源文件:

     1 #include "point.h"
     2 
     3 void main (void)
     4 {
     5     Point a, b(3, 5);
     6     a.Display();
     7     b.Display();
     8     a.Set(6, 8);
     9     b.Set(12.5, 25.37);
    10     a.Display();
    11     b.Display();
    12 }
    View Code

    结果:

    执行Point()构造函数

    执行Point(float a, float b)构造函数

    点的位置是:(0,0)

    点的位置是:(3,5)

    点的位置是:(6,8)

    点的位置是:(12.5,25.37)

    (12.5,25.37)执行析构函数

    (6,8)执行析构函数

    11.分析下列程序的执行结果:

     1 #include "point.h"
     2 
     3 void main (void)
     4 {
     5     Point a(4,6);
     6     a.Display();
     7     {
     8         cout << "进入了子程序块
    ";
     9         Point b(3,5);
    10         a.Display();
    11         b.Display();
    12     }
    13     cout << "退出了子程序块
    ";
    14     a.Display();
    15     //b.Display(); 若加了这一句,则会显示出错
    16 }
    View Code

    结果:

    执行Point(float a, float b)构造函数

    点的位置是:(4,6)

    进入了子程序块

    执行Point(float a, float b)构造函数

    点的位置是:(4,6)

    点的位置是:(3,5)

    (3,5)执行析构函数

    退出了子程序块

    点的位置是:(4,6)

    (4,6)执行析构函数

      执行结果显示,对象a的作用域可以进花括号,但对象b的作用域不能出花括号,对象b在右花括号处就执行了析构函数,然后消失.

    12.分析下列程序的执行结果.

    头文件:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Point1
     6 {
     7     float x, y;
     8 
     9 public:
    10     Point1();
    11     Point1(float a, float b);
    12     Point1(Point1 &obj);
    13     ~Point1()
    14     {
    15         cout << '(' << x << ',' << y << ")执行析构函数" << endl;
    16     }
    17 
    18     void Set(float a = 0, float b = 0)
    19     {
    20         x = a;
    21         y = b;
    22     }
    23 
    24     void Display()
    25     {
    26         cout << "点的位置是:(" << x << ',' << y << ")
    ";
    27     }
    28 };
    29 
    30 Point1::Point1()
    31 {
    32     x = 0;
    33     y = 0;
    34     cout << "执行Point1()构造函数" << endl;
    35 }
    36 
    37 Point1::Point1(float a, float b)
    38 {
    39     x = a;
    40     y = b;
    41     cout << "执行Point1(float a, float b)构造函数" << endl;
    42 }
    43 
    44 Point1::Point1(Point1 &obj)
    45 {
    46     x = obj.x;
    47     y = obj.y;
    48     cout << "执行Point1(Point1 &obj)构造函数" << endl;
    49 }
    point1.h

    源文件:

     1 #include "point1.h"
     2 
     3 void main (void)
     4 {
     5     Point1 a(53, 24);
     6     a.Display();
     7     Point1 b(a);
     8     b.Display();
     9     a.Set(16, 28);
    10     Point1 c(a);
    11     c.Display();
    12     c.Set(3.14, 6.28);
    13     c.Display();
    14     cout << "现在a";
    15     a.Display();
    16     cout << "现在b";
    17     b.Display();
    18     cout << "现在c";
    19     c.Display();
    20 }
    View Code

    结果:

    执行Point1(float a, float b)构造函数

    点的位置是:(53,24)

    执行Point1(Point1 &obj)构造函数

    点的位置是:(53,24)

    执行Point1(Point1 &obj)构造函数

    点的位置是(16,28)

    点的位置是(3.14,6.28)

    现在a点的位置是:(16,28)

    现在b点的位置是:(53,24)

    现在c点的位置是:(3.14,6.28)

    (3.14,6.28)执行析构函数

    (53,24)执行析构函数

    (16,28)执行析构函数

    Mark:

      (1)复制构造函数的一般形式为:<类名>(<类名> &<对象名>);

      (2)应用复制构造函数定义新对象格式为:

      <类名> <新对象名>(老对象名)  或  <类名> <新对象名> = <老对象名>,上面Point b(a)可写成 Point b = a.

    13.利用point1.h为头文件,定义函数和主程序如下:

     1 #include "point1.h"
     2 
     3 void f1(Point1 x)
     4 {
     5     cout << "f1函数在运行" << endl;
     6     x.Display();
     7     cout << "f1函数结束运行" << endl;
     8 }
     9 
    10 void main (void)
    11 {
    12     Point1 a(3, 6.5);
    13     cout << "准备运行f1函数" << endl;
    14     f1(a);
    15     cout << "回到了主程序" << endl;
    16 }
    View Code

    结果:

    执行Point1(float a, float b)构造函数

    准备运行f1函数

    执行Point1(Point1 &obj)构造函数

    f1函数在运行

    点的位置是:(3,6.5)

    f1函数结束运行

    (3,6.5)执行析构函数

    回到了主程序

    (3,6.5)执行析构函数

      若在void f1(Point1 x)改为void f1(Point1 &x),即:

     1 #include "point1.h"
     2 
     3 void f1(Point1 &x)
     4 {
     5     cout << "f1函数在运行" << endl;
     6     x.Display();
     7     cout << "f1函数结束运行" << endl;
     8 }
     9 
    10 void main (void)
    11 {
    12     Point1 a(3, 6.5);
    13     cout << "准备运行f1函数" << endl;
    14     f1(a);
    15     cout << "回到了主程序" << endl;
    16 }
    View Code

    结果:

    执行Point1(float a, float b)构造函数

    准备运行f1函数

    f1函数在运行

    点的位置是:(3,6.5)

    f1函数结束运行

    回到了主程序

    (3,6.5)执行析构函数

    Mark:

      在用对象作为参数时,应该养成使用引用的习惯,这是一种好的C++程序设计风格.

    14.利用point1.h为头文件,分析下列程序的功能.

     1 #include "point1.h"
     2 
     3 Point1 f2(void)
     4 {
     5     Point1 x(10, 20);
     6     return x;
     7 }
     8 
     9 void main (void)
    10 {
    11     cout << "开始执行f2函数" << endl;
    12     f2();
    13     cout << "f2函数运行结束" << endl;
    14 }
    View Code

    结果:

    开始执行f2函数

    执行Point1(float a, float b)构造函数

    执行Point1(Point1 &obj)构造函数

    (10,20)执行析构函数

    (10,20)执行析构函数

    f2函数运行结束

      这说明f2()中定义的对象x,在执行返回操作时,要先复制构造函数建立一个临时对象,然后再调用析构函数消失,上面的运行结果第一个"(10,20)执行析构函数"是对象x执行的,第二个"(10,20)执行析构函数“是临时对象执行的.

    15.对象指针应用,定义Location类表示点.

    头文件:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Location
     6 {
     7     float x, y;
     8 
     9 public:
    10     Location(float a = 0, float b = 0)
    11     {
    12         x = a;
    13         y = b;
    14     }
    15 
    16     float getx()
    17     {
    18         return x;
    19     }
    20 
    21     float gety()
    22     {
    23         return y;
    24     }
    25 
    26     void print()
    27     {
    28         cout << "(X, Y) = (" << x << ", " << y << ")
    ";
    29     }
    30 };
    location.h

    源文件:

     1 #include "location.h"
     2 
     3 void main(void)
     4 {
     5     Location A(115.5, 38.75);
     6     Location *ptr;
     7     float x, y;
     8 
     9     ptr = &A;
    10     x = ptr->getx();
    11     y = ptr->gety();
    12     cout << "X = " << x << ", Y = " << y << endl;
    13     ptr->print();
    14 }
    View Code

    结果:

    X = 115.5, Y = 38.75

    (X, Y) = (115.5, 38.75)

  • 相关阅读:
    Redis持久化——AOF日志
    设计原则:接口隔离原则(ISP)
    设计原则:里式替换原则(LSP)
    新入职一家公司如何快速进入工作状态
    又是一年毕业季——如何入坑程序员
    设计原则:开闭原则(OCP)
    设计原则:单一职责(SRP)原则
    Redis持久化——内存快照(RDB)
    工作中应该如何管理自己的情绪?
    如何成为一个精力充沛的程序员——掌控
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5037863.html
Copyright © 2011-2022 走看看