面向对象(OOP)
3.1 类与对象基础
OOP的四大特征是什么?
抽象 — 封装 — 继承 — 多态
类 -》 实体
访问限定符:
public (公共),private (私有),protected (保护)
对于成员属性
#include<iostream>
using namespace std;
const int NAME_LEN = 20;
class CGOODS
{
private:
char _name[NAME_LEN];
double _price;
int _amount;
};
int main()
{
CGOODS good;
cout << good._price << endl;
return 0;
}
报错
所以,属性一般都是私有的,能具有更高的安全性
而为了能访问属性,一般会提供公有的方法
public://公有的成员方法
void init(char* name, double price, int amount);
void show();
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; }
类体内实现的方法,自动处理成inline内联函数
而在类外定义的成员方法,则会和一般函数一样有函数调用过程
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;
//cout << good._price << endl;
good1.init("面包", 10.0, 200);
good1.show();
good1.setPrice(20.5);
good1.show();
CGOODS good2;
good2.init("空调", 10000,50);
good2.show();
return 0;
}
计算对象的内存大小,对象的内存大小只和成员变量有关。(与struct结构体相同)
类可以定义无数个对象,每一个对象都有自己的成员变量,但是共用一套成员方法。
那么成员方法怎么知道处理哪个对象的信息?
init(name,price,amount)=》怎么知道初始化哪个对象?
答:会把调用的对象的地址传进该成员方法
即,类的成员方法一经编译,所有的方法参数,都会加一个this指针,接收调用该方法的对象的地址
3.2 构造函数与析构函数
先来一个顺序栈代码
#include<iostream>
using namespace std;
class SeqStack
{
public:
void init(int size = 10)
{
_pstack = new int[size];
_top = -1;
_size = size;
}
void release()
{
delete[]_pstack;
_pstack = nullptr;
}
void push(int val)
{
if (full())
resize();
_pstack[++_top] = val;
}
void pop(