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