zoukankan      html  css  js  c++  java
  • 理解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;
    }
    
  • 相关阅读:
    如何让你的Sublime和Codeblocks支持C++11
    Python print不换行输出的替代方法
    阶梯博弈
    hdu4633_Polya定理
    Ural_1169_Pairs
    ACM竞赛中的魔方问题专题(不定时更新)
    LintCode 35. 翻转链表
    windows中mysql5.7中配置中文字符集和默认datadir
    CentOS7使用打开关闭防火墙与端口
    关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑
  • 原文地址:https://www.cnblogs.com/yaos/p/14014204.html
Copyright © 2011-2022 走看看