售货员习题对关于类的静态数据和成员函数的总结-20120917
来源:互联网 发布:网络发送短信 编辑:程序博客网 时间:2024/06/07 16:27
最近,谭浩强的售货员卖东西的习题,看起来挺简单的,但是自己做起来却花了比较长的时间,在此做一个总结。
先上习题:
================================================================================
9. 商店销售某一商品, 商店每天公布统一的折扣(discount)。 同时允许销售人员在
售时灵活掌握售价(price), 在此基础上, 对一次购10件以上者, 还可以享受9.8折优惠。
现已知当天3名销货员的销售情况为:
销货员号(num) 销货件数(quantity) 销货单价(price)
请编程序, 计算出当日此商品的总销售款sum, 以及每件商品的平均售价。要求用静态数
要求使用静态成员和静态成员函数,首先必须弄清楚哪些要做为静态的变量。静态成员根本的意义就在于:所有的对象都是使用
这个变量,它的值一改变,所有对象引用它的值均会改变。它是独立于对象的,属于类的。
它的内存空间和对象的空间是单独开辟的,所以初始化的时候必须要用类来进行初始化而不是用对象。
class Price{public:static float discount_index;//定义一个静态的discount_index变量};float Price::discount_index=0.98;//<类型> classname::<静态变量>;
明白了静态成员的作用则可以定义本题中的静态变量,原则就是:所有对象所公用的数据
1.商品的总销售量 total_quantity
2.商品的总价 total_price
3.商品的平均价 average_price
另外,对于每个员工来说固有的属性有:
1.工号 number
2.销售件数 quantity
3.单价 unit_price
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
另外一个就是静态的成员函数,静态成员函数也是独立于对象,归属于类的函数。
在此不得不提到this指针:简单来说,this指针就是起到,告诉成员函数该去引用哪个对象做为参数的作用。
class Time{ public: void show_time();//假设show_time已经定义 private: int hour; int minute;};Time t1,t2;t1.show_time();t2.show_time();
系统是如何知道该调用哪个对象的时间?
系统的处理是:
void show_time(Time *this) //this指针
{
cout<<this->hour<<endl;
cout<<this->minute<<endl;
}
Time *this=&t1;
但是对于静态成员函数来说,是没有this指针的,没有this指针是什么意思?
static void Show_time();如何调用hour和minute?无法通过地址赋值,所以无法访问。
那static void Show_time();又是如何访问static的成员的呢?
百度了一下:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
我是JAVA程序员,我就从JAVA方面说吧.这与静态数据的存放位置和绑定机制有关,JAVA是动态绑定的,只有到运行的时候才真正知道要去找哪个成员的实现,而把数据成员声明成静态的则是实现"静态绑定"的一种方法,这就是为什么声明成静态的可以提高速度的原因了.因为静态函数也归署于静态绑定(事先就知道我要用的变量在哪),所以他只能访问静态变量!
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
在编译时,常规成员数据变量地址的分配时动态的,但是对于static的变量,他的地址是确定的,所以静态的成员函数可以访问静态的成员,
这个是我自己的理解。
//要求使用静态变量和静态成员函数//流程://员工属性:工号 销售件数 销售单价 每个都不同//共同属性:总销量 打折数目 平均价格 总价#include <iostream>using namespace std;//定义Sale类class Sale{public:Sale(int number,int quantity,float price);static void total_quantity(Sale *p);static void total_price(Sale *p,float);static void average_price(float,int);static void display();//private:int number;int quantity;float price;static double discount_index;//diplay需要输出的变量static int all_quantity;static float all_price;static float all_average;};int Sale::all_quantity=0;float Sale::all_price=0;float Sale::all_average=0;//定义员工属性的构造函数Sale::Sale(int number,int quantity,float price):number(number),quantity(quantity),price(price){}//静态成员discount_index赋值不可通过构造函数,静态成员只是类的而不是对象的double Sale::discount_index=0.98;//定义diplay函数void Sale::display(){cout<<"The all quantity is"<<Sale::all_quantity<<endl;cout<<"The all_price is"<<Sale::all_price<<endl;cout<<"The all_average is"<<Sale::all_average<<endl;}//定义销售总数量的函数,static函数定义方法有点不同,可能无法访问private数据void Sale::total_quantity(Sale *p){ Sale::all_quantity=p->quantity+(p+1)->quantity+(p+2)->quantity;}//得出总的价格,对于买了10件以上的会discount//默认的discount为0.98,判断是否超过10件,超过了dicount不变,未超过discont为1void Sale::total_price(Sale *p,float discount){int i; float sum; for(i=0,sum=0;i<3;i++) { float temp=discount; if((p+i)->quantity<=10) temp=1; sum+=((p+i)->quantity)*((p+i)->price)*temp; } all_price=sum; }//平均价格=总价÷总数量 void Sale::average_price(float total_price,int total_quantity){ all_average=total_price/total_quantity;}//main函数main(){Sale Saler[3]={Sale(101,5,23.5),Sale(102,12,24.56),Sale(103,100,21.5)};Sale *pointer=Saler;//得出总的销量Sale::total_quantity(pointer);//得出总的价格Sale::total_price(pointer,Sale::discount_index);//得出平均价 Sale::average_price(Sale::all_price,Sale::all_quantity);Sale::display();return 0;}1.static的数据成员必须要进行初始化,不然编译会报错
2.引用静态成员函数要明确他的类即作用域的问题
3.员工的工号并未使用
- 售货员习题对关于类的静态数据和成员函数的总结-20120917
- 对C++中的类的静态数据成员和静态函数成员的认识
- 关于编译器对c++ 类静态成员、静态成员函数、非静态成员函数的处理
- 类的静态数据成员和静态成员函数浅析
- 类的静态数据成员和静态成员函数
- 类的静态成员函数和静态数据成员
- 类的静态成员函数和静态数据成员
- 关于静态数据成员与静态成员函数的…
- 关于C#中静态数据成员和静态方法的总结。
- 关于C#中静态数据成员和静态方法的总结
- 结合上面的五个例子,对类的静态成员变量和成员函数作个总结: 一。静态成员函数中不能调用非静态成员。 二。非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所
- 静态成员(静态成员函数,静态数据成员)的特性
- 具有静态数据和函数成员的Point类
- 具有静态数据和函数成员的Point类
- C++类中静态成员数据和静态成员函数的自我理解
- 关于C++类的静态成员函数
- 关于c++的静态数据(函数)成员的理解
- 类的静态成员函数和静态成员变量
- Unity3d 赛车车辆各类性能算法---总结
- HDU4291 循环节+矩阵连乘2012 ACM/ICPC Asia Regional Chengdu Online1004
- hibernate查询(二)
- Useful and Simple srcipts for Oracle CoolBackup
- Windows上的OpenVPN如何封装真实IP作为源地址
- 售货员习题对关于类的静态数据和成员函数的总结-20120917
- 黑马程序员_JavaSE基础16 之 基本类型转换 进制转换 拆装箱 List Set
- Android蓝牙串口通信模板及demo,trick
- RTMP协议详解
- PHP的学习感悟
- Windows 8下程序兼容性问题解决
- 解决nginx服务器图片(js/背景图片)不能显示问题
- Ubuntu 12.04安装QQ2012
- hdu 2829 Lawrence(二维DP+斜率优化)