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;
    }
    
  • 相关阅读:
    Jquery使用live导致执行的内容会重复执行
    网上找的些tomact配置
    DatePicker 注意点 1.不用v-model 用:value 2.配合on-change进行回调 3.初始值 当天的用 (new Date()).toLocaleDateString().replace(///g, '-')
    Springboot框架 idea 工具 解决代码修改需要重新启动的方式
    合同签订
    ORACLE链接错误解决方案
    oracle中的split
    axis2和springboot冲突问题
    ActiveMQ中文乱码问题
    AXIS2的接口调用常见以及不常见问题
  • 原文地址:https://www.cnblogs.com/yaos/p/14014204.html
Copyright © 2011-2022 走看看