面向对象

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值