C++:this指针与对象数组(第十章)

第十章笔记链接:
类作用域
this指针和对象数组
构造函数和析构函数
面向对象、抽象和类

this指针

  1. this 指针指向用来调用成员函数的对象,意思是说成员函数里使用this指针就是指向自身这个类对象(指针作为隐藏参数传递给方法)。
  2. 所有的类方法都将this指针设置为自身对象的地址,用->运算符可以访问类成员。
  3. 如果想引用整个调用对象,则可以使用*this。。
  4. this指针是常量指针,因此它调用的函数必须也是const类型。
    代码实现如下:还是以Stock类为例子,实现比较两个对象谁的总值最大,然后返回最大总值的类引用,然后show出来
头文件里书写:
const Stock & top (const Stock & s) const;
void show() const;

解释:后面的const表示该函数不会修改被隐式访问的对象。由于该函数返回两个const对象中的其中一个的引用,所以返回类型为const类型的类引用。由于this是常量指针,所以show函数也是const类型,否则会发生编译报错。

源代码文件里书写:
const Stock & top (const Stock &s) const
{
      if(s.tot_val > tot_val)
          return s;
      else
          return *this;

解释:比较作为参数传递的总值和隐式访问的总值,然后返回总值更大的那一个类对象引用,若s.tot_val更大则返回s的引用;若tot_val更大则返回自身。因为自身的引用没有别名,所以有this指针指向自身的类对象。

主程序里代码书写:
Stock Jeff1, Jeff2; (假设已经初始化...)
const Stock * top = &Jeff1.topval(Jeff2)

解释:首先声明一个指向const 类对象的指针,然后该指针指向 Jeff1和Jeff2两个对象里总值最大的那一个,注意指针初始化接受的是地址。
若top是个对象,则

top = Jeff1.topval(Jeff2);

当然我们不仅仅要比较两个对象,我们要比较好多个对象咋办咧?
这就对象数组啦

对象数组

  1. 对象数组就是多个同类的对象组成的数组,声明方式和标准声明方式一样
  2. 数组成员调用函数用点运算符
  3. 数组的初始化(代码给出)
主程序里代码如下:
Stock Jeff[4] =
    {
        Stock("A",10,200),
        Stock(),          //这样为隐式默认构造函数
        Stock("C"),      //之前声明的构造函数设置了两个默认参数
        Stock("D",20,300)
    };  //如果没有Stock("D",20,300)则自动调用默认构造函数
    int i;
    for(i=0;i<4;i++)
        Jeff[i].show();
    const Stock * top = &Jeff[0].topval(Jeff[1]);
    std::cout<<"最后一个为最大值:\n";
    for(i=1;i<4;i++)
    {
        top = &top->topval(Jeff[i]);
        top->show(); } 

解析:

  1. 创建类对象数组,这个类必须有默认构造函数(自定义or not)。因为初始化对象数组,首先使用默认构造函数创建数组元素,然后花括号中的构造函数创建临时对象,然后将临时对象复制到相应的元素中。
  2. top指针初始化是演示上一部分的内容
  3. 依次比较数组中的对象,得出总值最大的对象。指针用->运算符来访问成员函数topval,用地址&赋值。


    结果

你可能感兴趣的:(C++:this指针与对象数组(第十章))