C++三大特征 封装 继承 多态
封装
类中的三个访问限定符
1.public 公有 任意位置
2.private 私有 本类类中
3.protected 保护 本类和子类
类中
默认以inline处理
类外
默认以普通的函数处理方式处理
this 类类型* const
OOP 思想
编译器一共增加了三个东西
1、汇编函数调用的地方,调用函数的对象的地址作为参数传入进去
2、所有成员方法的原型中,第一个全部加了指向该类的 this 指针
3、所有成员方法实现的地方,只要涉及成员变量,前面都加了 this->
this指针
指向调用该成员方法的对象
只要是成员方法,被编译之后都会多出一个 CGood * const this
系统产生的函数,有两个特点public、inline
class CGoods
{
public:
//成员方法,不占对象内存,这些函数都是指令,在.text段
//void init(CGoods* const this, char*name, int amount,float price);
void Regiser(char* name, int amount, float price);//thiscall
void show();
//自动被编译器处理成inline函数
void SetName(char *name)
{
this->mname = new char[strlen(name) + 1];
strcpy(mname, name);
}
void SetAmount(int amount){mamount = amount;}
void SetPrice(float price){mprice = price;}
char * GetName();
int SetAmount();
float SetPrice();
//void destoryed();//_thiscall
private://私有成员并不能被外界访问,所以要提供一系类共有的接口
char* mname;
int mamount;
float mprice;
};
//普通函数
void CGoods::Regiser(char* name, int amount, float price)
{
mname = new char[strlen(name) + 1];
strcpy(mname, name);
mamount = amount;
mprice = price;
}
void CGoods::show()
{
cout<< "name"<<mname<<" "<< endl;
cout<< "amount"<<mamount<<" "<< endl;
cout<< "price"<<mprice<<" "<< endl;
}
int main()
{
CGoods good1;
CGoods good2;
//编译器编译,给函数加一个实参&good,&good由寄存器带入
good1.Regiser("aaa",200,8.5);
//good1.Regiser(&good1,"aaa",200,8.5);
good1.show();
//good1.show(&good1);
good2.Regiser("bbb",150,9.5);
//good2.Regiser(&good2,"bbb",150,9.5);
good2.show();
//good2.show(&good2);
}