#include<iostream>
using namespace std;
class CGoods
{
private:
//类内不能初始化 类不占内存
char _name[20];//货品名
int _amount; //货品数量
float _price;//货品单价
public:
void Register(char *name,int amount,float price);
void show();
void SetName(char* name){strcpy(_name,name);};//类内实现成员方法
void SetAmount(int amount){_amount=amount;};
void SetPrice(float price) ;
void GetName(char *name){strcpy(_name,name);};
/*为什么不用以下这种方式返回name参数
char* GetName(char *name){strcpy(_name,name);};
这样会把私有的数组地址返回回去,外部有可能通过解引用修改字符串
类似于:
CGoods good;//面包
char *p=good.GetName();
*p='a'; //这样会把面包改为a
注意不能把私有的指针或引用泄露出去
*/
int GetAmount(){return _amount;};
float GetPrice(){return _price;};
};
void CGoods::Register(char *name,int amount,float price)//类外实现成员方法
{
strcpy(_name,name);
_amount=amount;
_price=price;
};
void CGoods::show()
{
cout<<"name: "<<_name<<endl;
cout<<"amount: "<<_amount<<endl;
cout<<"prince: "<<_price<<endl;
}
int main()
{
CGoods good1;
CGoods good2;
good1.Register("shangpin1",200,0.5);
good1.show();
good2.Register("shangpin2",100,10);
good2.show();
return 0;
}
/*
类内实现成员方法和类外实现成员方法的区别:
类内实现的成员方法自动被编译器处理成inline函数
a.h
class Test
{
public:
void func(){}
};
void Test::func(){}
b.cpp
#include"a.h"
c.cpp
#include"a.h"
若是类外实现的函数,
b.cpp和c.cpp同时引用a.h头文件会引起函数重定义的问题
若是类内实现的函数,因为会被处理成内联函数(替换)
*/