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指针的作用就是在成员方法中区分当前类的不同对象,到底要处理的是哪个对象的数据