静态成员相关知识

文章介绍了C++中静态成员的概念,包括静态数据成员和静态成员函数。静态成员在所有类对象间共享,不依赖于特定对象存在。静态数据成员需在类外初始化,静态成员函数无this指针,不能直接访问非静态成员。示例程序展示了如何使用静态成员处理商品销售的折扣和统计问题。
摘要由CSDN通过智能技术生成

目录

定义

静态数据成员

静态成员函数

相关程序应用


定义

       静态成员分为静态数据成员和静态成员函数。静态成员的特征是不管这个类创建了多少个对象,而其静态成员只有一个副本,这个副本被这个类的所有对象共享。

静态数据成员

       静态数据成员被存在内存的某一单元内,该类的所有对象都可以访问他。在没有建立该类对象的时候,静态数据成员的存储空间是仍然存在的。静态数据成员可以看作是一个全局变量(注意:含有数据成员的类在定义对象时,不会再为静态数据成员分配存储空间)

静态数据成员的初始化在类外进行,格式为:

<数据类型><类名>::<静态数据成员>=(初始值)

将数据成员封存在类中的目的是:

1.限制变量的作用范围。 

2.将意义相关的全局变量和物理操作放在一起,可以增加程序的可读性和维护性。

        注意:将程序分为多块编译的时候,需要将类和静态成员的初始化放在不同的地方,否则会使静态数据成员重复初始化。

静态成员函数

       静态成员函数与静态数据成员类似,可以把它看作是静态数据成员,将他封存在类中的目的与静态数据成员的目的一样。

静态成员函数的特点:

       1.静态成员函数没有this指针,所以他不能直接访问非静态的数据成员,必须要通过该类的对象访问。

       2.在静态成员函数中访问的都是静态数据成员或全局变量。

       3.在调用静态成员函数的时候必须缀上对象名或者类名,一般采用类名

       4.不需要定义对象就可以被调用。

       5.非静态成员函数不能和非静态成员函数有相同的名字和参数类型。

相关程序应用

商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。现已知当天3名销货员的销售情况为:

销货员号(num)    销货件数(quantity)       销货单价(price)

101                   5                    23.5

102                  12                    24.56

103                 100                    21.5

请编程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。要求用静态数据成员和静态成员函数。

提示: 将折扣discount、总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。每天商店都有一个折扣discount,这是指无论消费者买几件商品都能够享受到的折扣,相当于“只要你买我就打折”的意思,如果一次买得多,超过10件,就享受折上折,价格上给你个98折。

因为discount每天可能不同(根据节假日会动态调整),

所以discount这个折扣是键盘输入的。

例如:discount定为95折,则键盘输入0.95

101号销货员销售的货款为  :  5*23.5*0.95=111.625元

102号销货员销售的货款为  :  12*24.56*0.95*0.98=274.38432元

#include<iostream>
using namespace std;
class thing
{
	public:
		thing(int a,float b):quality(a),price(b){}; 
		static float average();
		static void display();
		static void set();
		void total();
	private:
		int quality;
		float price;
	    static float sum;
		static float discount;
		static int n;
};
void thing::set()
{
	cout<<"今天的统一折扣是:"<<endl;
	cin>>discount;
	
}
float thing::average()
{
	return sum/n;
}
void thing::display()
{
	cout<<"今天的总销售额是:"<<endl;
	cout<<sum<<endl;
	cout<<"每件商品的平均售价是:"<<endl;
	cout<<average()<<endl;
}
void thing::total()
{
	n+=quality;
	if(quality>=10)
	{
		sum=sum+quality*price*discount*0.98;
	}
	else sum=sum+quality*price*discount;
}
float thing::sum = 0;
float thing::discount = 1.0;
int thing::n = 0;
int main()
{
	thing::set();
    thing a[3]={thing(5,23.5),thing(12,24.56),thing(100,21.5)};
	for(int i=0;i<3;i++)
	{
		a[i].total();
	}
	thing::average();
	thing::display();
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值