C++面向对象-类和对象、this指针

OOP思想:

  • 首先我们分析问题场景种寻找一个实体;
  • 根据实体的属性与行为 可以得到ADT抽象的数据类型;
  • ADT 输出为一个类 (属性对应成员变量,行为对应成员方法);
  • 实例化类 生成了一个对象 ,此对象在逻辑意义中才对应一个实体;

OOP语言的四大特征:

抽象 封装/隐藏 继承 多态

#include <iostream>
#include <string.h>
using namespace std;

/*
C++ : 类 -> 实体的抽象类型
    实体(属性、行为) -> ADT(abstract data type)
     |                               |
    对象          <-(实例化)类(属性->成员变量 行为->成员方法)

类 -> 商品实体
*/

const int NAME_LEN = 20;
class CGoods {
  public: //给外部提供公有成员方法,访问私有属性
    //初始化数据
    void init(const char* name, double price, int amount);
    //打印商品信息
    void show();
    //给成员变量提供一个getxxx 或 setxxx 方法
    //类体内实现的方法,自动处理成inline 内联方法
    void setName(char* name) { strcpy(_name, name); }
    void setPrice(double price) { _price = price; }
    void setAmount(int amount) { _amount = amount; }

    const char* getName() { return _name; }
    double getPrice() { return _price; }
    int getAmount() { return _amount; }

  private: //属性一般私有
    char _name[NAME_LEN];
    double _price;
    int _amount;
};

void CGoods::init(const char* name, double price, int amount) {
    strcpy(_name, name);
    _price = price;
    _amount = amount;
}

void CGoods::show() {
    cout << "name:" << _name << endl;
    cout << "price:" << _price << endl;
    cout << "amount:" << _amount << endl;
}

int main() {
    CGoods good1; //类实例化对象
    // init(&good1, "面包", 10.0, 200);
    good1.init("面包", 10.0, 200);
    // show(&good1)
    good1.show();
    good1.setPrice(20.5);
    good1.setAmount(100);
    good1.show();

    CGoods good2;
    good2.init("空调", 10000.0, 50);
    good2.show();

    return 0;
}

CGoods 可以定义无数的对象,每一个对象都有自己的成员变量,但是它们共享一套成员方法

show() => 怎么知道处理哪个对象的信息?

init(name, price, amount) => 怎么知道把信息初始化给哪一个对象的呢?

  • 类的成员方法一经编译,编译器会把所有的成员方法的参数都加一个this指针,接收调用该方法的对象的地址;
  • this指针的作用就是在成员方法中区分当前类的不同对象,到底要处理的是哪个对象的数据
posted @ 2022-08-30 20:58  言叶以上  阅读(15)  评论(0编辑  收藏  举报