• 理解C++类 this 指针的例子


    网上看了很多说明,还是处于半知半解的状态,看了下面这个例子才算是明白了this指针

    #include <iostream>
     
    using namespace std;
    
    class Box {
       public:
          // Constructor definition
          Box(double l = 2.0, double b = 2.0, double h = 2.0) {
             cout <<"Constructor called." << endl;
             length = l;
             breadth = b;
             height = h;
          }
          double Volume() {
             return length * breadth * height;
          }
          int compare(Box box) {
             return this->Volume() > box.Volume();
          }
          
       private:
          double length;     // Length of a box
          double breadth;    // Breadth of a box
          double height;     // Height of a box
    };
    
    int main(void) {
       Box Box1(3.3, 1.2, 1.5);    // Declare box1
       Box Box2(8.5, 6.0, 2.0);    // Declare box2
    
       if(Box1.compare(Box2)) {
          cout << "Box2 is smaller than Box1" <<endl;
       } else {
          cout << "Box2 is equal to or larger than Box1" <<endl;
       }
       
       return 0;
    }
    
    Constructor called.
    Constructor called.
    Box2 is equal to or larger than Box1
    [Finished in 1.9s]
    

    说明:
    表达式Box1.compare(Box2)Box1调用了compare函数,compare函数中的this指针此时指向的是Box1,因此compare函数中的表达式return this->Volume() > box.Volume()变成了return Box1->Volume() > box.Volume()

    以上例子也可以写成指针的形式,如下

    #include <iostream>
     
    using namespace std;
    
    class Box {
       public:
          // Constructor definition
          Box(double l = 2.0, double b = 2.0, double h = 2.0) {
             cout <<"Constructor called." << endl;
             length = l;
             breadth = b;
             height = h;
          }
          double Volume() {
             return length * breadth * height;
          }
          int compare(Box box) {
             return this->Volume() > box.Volume();
          }
          
       private:
          double length;     // Length of a box
          double breadth;    // Breadth of a box
          double height;     // Height of a box
    };
    
    int main(void) {
       Box *b1 = new Box(3.3, 1.2, 1.5);    // Declare b1
       Box *b2 = new Box(8.5, 6.0, 2.0);    // Declare b2
    
       if(b1 ->compare(*b2)) {
          cout << "b2 is smaller than b1" <<endl;
       } else {
          cout << "b2 is equal to or larger than b1" <<endl;
       }
       
       return 0;
    }
    
  • 相关阅读:
    27个提升效率的iOS开源库推荐
    HTTP Authorization
    两种方法删除NSUserDefaults所有记录
    label调整字间距,调整行间距
    iphone手机屏幕大小
    app 图标需要的大小
    多了一层或者多层响应者 如何实现跳转
    用python实现excel中查找指定字符的行信息
    Python 遍历一个目录,输出所有的文件名
    kettle HTTP client
  • 原文地址:https://www.cnblogs.com/yaos/p/12099213.html
Copyright © 2020-2023  润新知