题目要求

商店销售某一商品,商店每天公布统一的折扣(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 (输出结果)

——谭浩强的《C++面向对象程序设计》第3章习题第9小题

静态成员

声明为 static 型的类的成员称为静态成员,它不只属于某个对象,而是属于整个类的对象,为某个类的所有对象共享。
如果想在同类的多个对象之间实现数据共享,也不用全局变量,可以用静态的数据成员。
静态成员有两种: 静态数据成员、静态成员函数。

静态数据成员

  1. 静态数据成员定义格式:
static 类型 数据成员名

例如:

static int n;          // 静态数据成员:商品销售总件数
static float sum;      // 静态数据成员:总销售款
static float discount; // 静态数据成员:折扣
  1. 静态数据成员可以初始化,但只能在类外专门对其初始化。
    格式:
数据类型 类名::静态数据成员名 = 初值;

例如:

int Sale::n = 0;
float Sale::sum = 0;
float Sale::discount = 0.01;

如果未对静态数据成员赋初值,编译系统会自动赋予初值0。
注意不能用参数初始化表对静态数据成员初始化。

静态成员函数

静态成员函数可以访问静态数据成员,它不属于某个对象而属于类的所有对象
类中的非静态成员函数可以访问类中所有数据成员;而静态成员函数可以直接访问类的静态成员,不能直接访问非静态成员

  1. 静态成员函数定义格式:
static 类型 成员函数(形参表){…}

例如:

static float average(); // 静态成员函数:求平均售价
static void  display(); // 静态成员函数:输出结果
  1. 在类外调用公有静态成员函数的格式:
类名::静态成员函数 (实参表)

例如:

Sale::display(); // 调用静态成员函数 display

也可以用对象来引用,但使用的是它的类型:

对象名.静态成员函数 (实参表)
  1. 静态成员函数的实现中能直接引用静态成员,但不能直接引用非静态成员。
    例如:
float Sale::average() // 定义静态成员函数 average()
{// 静态成员函数可以直接引用本类的静态成员return (sum / n);
}void Sale::display() // 定义静态成员函数 display()
{// 静态成员函数可以直接引用本类的静态成员cout << "Average:" << average() << endl; cout << "Sum:" << sum << endl;
}
  1. 一般在C++程序中,只用静态成员函数引用静态数据成员,而不引用非静态数据成员。

程序

/*
**************************************************************************
@file:    sale.cpp
@date:   2020.11.18
@author: Xiaoxiao
@blog:    https://blog.csdn.net/weixin_43470383/article/details/109698224
@brief:   计算商品总销售款和平均售价
**************************************************************************
*/
#include <iostream>using namespace std;class Sale
{private:static int n;          // 静态数据成员:商品销售总件数static float sum;      // 静态数据成员:总销售款static float discount; // 静态数据成员:折扣int num;               // 非静态数据成员:销货员号int quantity;          // 非静态数据成员:销货件数float price;           // 非静态数据成员:销货单价public:Sale(int n, int q, float p) :num(n), quantity(q), price(p) {}; // 定义构造函数void total();           // 非静态成员函数:求总销售款static float average(); // 静态成员函数:求平均售价static void display();  // 静态成员函数:输出结果
};int main()
{Sale salesman[3] = {   // 定义对象数组,参考我的上两篇博客Sale(101, 5, 23.5),    // 调用构造函数,提供第1个元素的实参Sale(102, 12, 24.56),  // 调用构造函数,提供第2个元素的实参Sale(10., 100, 21.5)   // 调用构造函数,提供第3个元素的实参};for (int i = 0; i < 3; i++)salesman[i].total();   // 调用3次 total 函数Sale::display(); // 调用静态成员函数 displaysystem("pause");return 0;
}// 静态数据成员初始化
int Sale::n = 0;
float Sale::sum = 0;
float Sale::discount = 0.01;void Sale::total() // 定义非静态成员函数 total()
{float rate = 1.0;if (quantity>10)rate = 0.98 * rate; // 一次性购10件以上,享受98折优惠sum = sum + quantity * price * rate * (1 - discount);// 计算销售额:销货件数 * 单价 * 折扣n = n + quantity;// 累加销货件数
}float Sale::average() // 定义静态成员函数 average()
{// 静态成员函数可以直接引用本类的静态成员return (sum / n);
}void Sale::display() // 定义静态成员函数 display()
{// 静态成员函数可以直接引用本类的静态成员cout << "Average:" << average() << endl;cout << "Sum:" << sum << endl;
}

运行结果


输出:
Average:21.2666
Sum:2488.19

【C++之静态数据成员和静态成员函数】计算商品总销售款和平均售价相关推荐

  1. 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...

  2. 3-6 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题 ...

  3. C++学习(五) 静态数据成员和静态成员函数

    文章目录 1.静态成员: 1.1.说明 1.2.格式 2.静态成员函数 2.1.说明 2.2.格式 1.静态成员: 1.1.说明 静态成员包括静态数据和静态成员函数. (1).静态数据成员的定义与普通 ...

  4. 类的静态数据成员和静态成员函数

    一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...

  5. C++类的静态数据成员和静态成员函数

    目录 公有属性 静态数据成员 静态成员函数 公有属性 一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相 ...

  6. [C++] 类的静态成员 (静态数据成员 和 静态成员函数)

    目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...

  7. 静态数据成员和静态成员函数

    转载自:https://blog.csdn.net/computer_liuyun/article/details/29235111 c++中的static静态数据成员和静态成员函数应该是让大家比较头 ...

  8. 静态数据成员和静态成员函数(static)

    目录 一.关于静态成员 二.静态数据成员和普通数据成员的共同点 三.为什么要使用静态数据成员 四.关于静态数据成员的初始化 五. 静态成员的访问方式 六.静态成员函数 1.与静态数据成员不同,静态成员 ...

  9. c++之静态数据成员与静态成员函数

    什么是静态数据成员? 数据成员我们之前学过,是对象的属性. 同一个类,不同的对象,可能拥有不同的属性 例如一个车行,不同的车有不同的颜色,不同的耗油量...等等属性 但是当我们统计一个公有的数据,用数 ...

最新文章

  1. MetaPhlAn2:宏基因组物种组成分析
  2. 【汇总】一大波CVPR2020开源项目重磅来袭!
  3. python super用法
  4. PWN-PRACTICE-BUUCTF-1
  5. asm 查看 数据文件 修改 时间_ASM磁盘组ORA15042故障处理案例一:NORMAL磁盘组下失败组离线后ORA15042报错的处理...
  6. python屏幕文字识别_python中使用OCR 技术进行《文字识别》
  7. 弹性力学方程 有限差分法matlab,泊松方程的有限差分法的MATLAB实现
  8. C语言平面向量加法运算,2.2.1 向量加法运算及其几何意义优质课一等奖
  9. netkeeper显示651_关于电信Netkeeper客户端升级的通知
  10. 嵌入式三级知识点整理
  11. 华为通用软件开发工程师面经(业务主管面挂)
  12. 1.冯诺依曼体系结构组成及其特点
  13. 手机如何测量长度?为什么现在很少携带尺子了
  14. photoshop修改启动图教程
  15. ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\ABC\AppData\Roaming\
  16. 从一个故事开始讲递归
  17. 文字识别(输入为自然场景中的图像)
  18. 计算机应用素描色彩,美术统考素描、色彩、速写考场技巧全攻略
  19. linux系统文件空间清理摸9z,Linux下的文件加密
  20. 黄金的18K和24K是什么意思

热门文章

  1. GPT分区数据格式分析(图已补上)
  2. 员工工号问题-华为OD
  3. cursor_sharing设置为similar 的弊端
  4. java输入一个字符串_在java中如何用键盘输入一个数,字符,字符串
  5. POI设置word文档只可修订
  6. 电脑没有开任何软件,但是cpu、内存和磁盘占用率都非常高的解决办法
  7. 智能电销机器人解决了传统电销行业哪些问题?
  8. linux系统最小化快捷键,如果你在学习linux,Unix那么快捷键你知道多少个
  9. 捡到iphone6怎么解锁_捡到的iPhone被锁了怎么办
  10. 江民在线杀毒的用户名和密码