C++中的三种成员方法

普通的成员方法:

1.属于类的作用域

2.调用该方法时需要依赖一个对象(常对象无法调用)

3.可以任意访问对象的私有成员

静态成员方法:(不会生成this形参)

1.属于类的作用域

2.用类名作用域调用方法

3.可以任意访问对象的私有成员,但是仅限于不依赖对象的成员(只能调用其他的静态成员)

class CShop{
public:
	CShop(const char *n, int a, double p,int y, int m, int d)
		:_amount(a)//int _amount = a;
		,_price(p)
	{
		strcpy(_name, n);
		_count++;
	}
	void ShowCShopCount(){
		cout<<count<<endl;
	}
	static void StaticShowCShopCount(){//静态成员方法
		cout<<count<<endl;
	}
private:
	char _name[20];
	int _amount;
	double _price;
	static int _count;//记录该类定义了多少个对象,声明一个静态变量
	//保存在数据段bss段上,不属于对象,属于类级别
};
int CShop::_count = 0;//static成员变量一定要在类外进行定义并且初始化
int main(){
	CShop goods1("A",50,500.0);
	CShop goods2("B",50,500.0);
	CShop goods3("C",50,500.0);
	CShop goods4("D",50,500.0);
	goods4.ShowCShopCount();//作用上能达到要求,但是用goods4调用打印全部的个数有些不符合逻辑,但是又不能直接用类名调用,因为是一个【普通的成员方法】
	CShop::StaticShowCShopCount();//静态成员方法直接用类名调用
	return 0;
}

static静态成员方法和普通的成员方法的区别:

1.最基本:前者用类名调用,后者用对象调用

2.重点:前者调用时不依赖于对象,所以定义时不会生成this指针,所以静态成员方法无法访问普通的成员变量

const常成员方法

1.属于类的作用域

2.调用该方法时需要依赖一个对象,常对象和普通对象都可以调用

class CDate{
public:
	CDate(int y, int m, int d){
		_year = y;
		_month = m;
		_day = d;
	}
	void show(){
		cout << _year << "/" << _month << "/" << _day << endl;
	}
	void show()const{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
class CShop{
public:
	CShop(const char *n, int a, double p,int y, int m, int d)
		:_date(y, m, d)
		,_amount(a)
		,_price(p)
	{
		strcpy(_name, n);
	}
	void show(){
		cout<<"name:"<<_name<<endl;
		cout<<"amount:"<<_amount<<endl;
		cout<<"price:"<<_price<<endl;
		_date.show();
	}
	//常成员方法,构成重载
	void show()const{//如此定义后,const CShop *this,对象是常量,对象的成员变量都是常量
		cout<<"name:"<<_name<<endl;
		cout<<"amount:"<<_amount<<endl;
		cout<<"price:"<<_price<<endl;
		_date.show();//如此一来,CDate类的成员方法show()也需要再写一个const重载
	}
private:
	char _name[20];
	int _amount;
	double _price;
	CDate _date;
};
int main(){
	const CShop goods5("E",1,50000.0);//定义一个常量对象
	goods5.show();//如果不写const重载会报错,因为把该常量对象的地址传到了show中的普通形参指针this
	return 0;
}

在成员方法对成员变量执行只读不写的操作时,建议一律写成const常成员方法,普通对象和常量对象都可以调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值