• 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指针的作用就是在成员方法中区分当前类的不同对象,到底要处理的是哪个对象的数据
  • 相关阅读:
    接受慕课网的访谈
    png在线压缩工具
    提高canvas性能技巧
    [转] PhoneGap build with iOS from the command line
    《包益民在TED上的演讲--A New Measure for Designers》—— 同讲工程师的价值和衡量标准
    HTML5和移动终端给前端开发带来的变化——近三年探索经验漫谈
    《不懂技术的人不要对懂技术的人说这很容易实现》
    不想当产品经理的项目经理不是好架构师 —— 最近的一些反思
    音乐类游戏demo
    kubernetes 存储-基于NFS的PV创建应用
  • 原文地址:https://www.cnblogs.com/anqwjoe/p/16640799.html
Copyright © 2020-2023  润新知