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;
    }
    
  • 相关阅读:
    C# FTP功能实现(转载)
    Invoke和BeginInvoke的使用(转载)
    .NET中各种数据库连接大全(转载)
    最近关注的网络资料(书签)
    SQL语句总结(转载)
    线程池和定时器——多线程的自动管理(转载)
    C#程序安装部署(转载)
    TcpClient.Connect函数连接超时的问题(转载)
    C# 各种定时器比较(转载)
    SQL SERVER中对日期字段(datetime)比较(转载)
  • 原文地址:https://www.cnblogs.com/yaos/p/14014204.html
Copyright © 2011-2022 走看看