类和对象

class CGoods
{
public:
	CGoods(char *name)//构造函数可以重载
	{
		mname = new char[strlen(name) + 1]();
		strcpy_s(name,strlen(name)+1,name);
		mamount = mprice = 0;
		
	}

	CGoods(char *name,int amount,float price)
	{
		mname = new char[strlen(name) + 1]();
		strcpy_s(name,strlen(name)+1,name);
		mamount = amount;
		mprice = price;
	}
	
	void sell(int number)
	{
		mamount -= number;
	}

	void buy(int number)
	{
		maount += number;
	}	
private:
	char *mname;
	int mamount;
	float mprice;
};
int main()
{
	CGoods good1("面包",200,4.5)
	good1.sell(20);
	good1.buy(100);
	
	return 0;
}

成员变量和成员方法与对象的关系
成员变量-对象 独享
成员方法-对象 共享

C++三大特征:
封装 继承 多态
封装 C++三个访问限定符
public: 成员访问 任意位置
protected:成员访问 本类 子类中
private:成员访问 本类
成员变量 一般都为private
成员方法 一般都为pubilc

this指针
系统给定的默认隐藏的一个参数

对象的生成
1.开辟对象所占的内存空间
2.调用构造函数

构造函数的作用:
初始化对象开辟的内存空间

构造函数可以重载

系统提供的构造函数是一个空函数

#inlcude<iostream>

class CGoods
{
//对象的生成:1.开辟对象所占的内存空间2.调用构造函数初始化对象所占的内存空间; 
//对象的销毁:1.释放对象所占的其他资源2.释放对象的空间
public:
	CGgoods()
	{
		mname = new char[1]();
		std::cout<<"CGgoods()"<<std::endl;
	}
	CGoods(float price)
	{
		manme = new char[1]();
		mprice = price;
		std::cout<<"CGoods(float)"<<std::endl;
	}
	CGoods(char* name,int amount,float price)
	{
		mname=new char[strlen(name)+1]();
		strcpy_s(name,strlen(name)+1,mname);
		mamount = amount;
		mprice = price;
		std::cout<<"CGood(char*,int,float)"<<std::endl;
	}

	~CGoods()//资源的统一释放
	{
		delete[] mname;
		mname = NULL;
		std::cout<<"~CGoods()"<<std::endl;
	}
	CGoods(const CGoods& rhs)//拷贝构造函数  *形参一定要用引用
	{
		mname = new char[strlen(rhs.mname)+1]();
		strcpy_s(mname,strlen(rhs.mname)+1,rhs.mname);
		mamount = rhs.mamount;
		mprice = rhs.mprice; 
		std::cout<<"CGoods::CGoods(const CGoods&)"<<std::endl;
	}
	
	CGoods operator=(const CGoods& rhs)
	{
		if(this != &rhs)
		{
			delete []mname;
			mname = new char[strlen(rhs.mname)+1]();
			strcpy_s(mname,strlen(rhs.mname)+1,rhs.mname);
			mamount = rhs.mamount;
			mprice = rhs.mprice;
		}
		std::cout<<"CGoods::operator=(const CGoods&)"<<std::endl;
		return *this;
	}
private:
	char *mname;
	int mamount;
	float mprice;
};

int main()
{
	CGoods good1;//调用默认的构造函数
	CGoods good2(10);//调用带有一个float类型的构造函数
	CGoods good3("car",10,100000);//调用带有三个参数的构造函数

	return 0;
}

赋值运算符的重载函数
提供对象赋值的方式(拿已存在的对象赋给相同类型的已存在对象)*返回值返回类类型的引用
1.自赋值
2.释放旧的其他资源
3.开辟的新的其他资源
4.成员赋值

对象的构造和析构顺序:先构造的后析构

取地址操作符的重载函数 : TYoperator&()
const修饰的取地址操作符的重载函数 : operator&()const

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值