面向对象(OOP)语言的四大特征:
抽象,封装,继承,多态
C语言中:各种各样函数的定义
C++中:类,实体的抽象类型
在C++中,我们通过分析实体的属性和行为,得到它的ADT(abstract,data,type)。我们就可以把ADT输出成类。
类,可以根据其属性输出成成员变量,行为输出成成员方法。
这时候类依然是抽象类型,只有通过类去实例化出的对象,才代表了现实中的实体。
实例:通过一个类去描述一个商品。
商品的属性有:名称,单价,数量。
商品的行为有:
#include <iostream>
using namespace std;
const int NAME_LEN = 20;
class CGoods //对商品的抽象数据类型
{
public://给外部提供公有的成员方法,来访问私有的属性
//做商品初始化用
void init(const char *name,double price,int amount);
//打印商品信息
void show();
//给成员变量提供一组getxxx或setxxx方法
//类体内实现的方法,自动处理成内联函数
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可以定义无数的对象,每个对象都有自己的成员变量,但是他们共享一套成员方法
//想了解对象内存大小的时候呢 对象的内存大小只和成员变量有关
CGoods good;//类实例化的一个对象
good.init("面包", 10.0, 200);
good.show();
good.setPrice(20.5);
good.setAmount(100);
good.show();
CGoods good2;//类实例化另一个对象
good2.init("空调",10000.0,50);
good2.show();
return 0;
}
类的成员方法一经编译,所有的方法参数,都会加一个this指针,接收调用该方法的对象的地址
void CGoods::init(const char *name,double price,int amount)
{
strcpy(this->_name,name);
this->_price = price;
this->_amount = amount;
}
void CGoods::show()
{
cout << "name:" << this->_name << endl;
cout << "price:" << this->_price << endl;
cout << "amount:" <<this-> _amount << endl;
}