#include<iostream>using namespace std;class Product{public:Product(int m,int q,float p):num(m),quantity(q),price(p){};void total();static float average();static void display();private:int num;int quantity;float price;static float discount;static float sum;static int n;};void Product::total (){float rate=10;if(quantity>10)rate=0.98*rate;sum=sum+quantity*price*(1-discount);n=n+quantity;}void Product::display (){cout<<sum<<endl;cout<<average()<<endl;}float Product::average (){return(sum/n);}float Product::discount=0.05f;float Product::sum=0;int Product::n=0;int main(){Product Prod[3]={Product(101,5,23.5f),Product(102,12,24.56f),Product(103,100,21.5f)};for (int i=0;i<3;i++)Prod[i].total();Product::display ();return 0;}
2 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
静态成员函数是属于一个类的,而不是属于一个类对应的某个对象。好处是所有的对象共享一个静态的成员函数,节省内存。注意静态成员函数内不能改变非静态成员变量,由于你的例子中都是改变的是静态变量,所以静态成员函数的定义是可行的。
void Product::display ()
{cout<<sum<<endl; //显示总和
cout<<average()<<endl; //条用平均的成员变量,再显示出来
}
Helenr
TA贡献1780条经验 获得超3个赞
静态成员函数属于类 而非静态成员函数属于对象.
之所以要用静态成员函数是因为静态成员函数可以用类名来引用他,而不用建立类的实例,非静态成员函数没有实例是不能使用的。这样就不用用到构造函数和析构函数了,能提高效率。。例如,drawRect成员函数使用了System.out.println成员函数,但实际上你却未曾创建一个某个System类的对象,这正是因为 out是System类的一个静态变量,所以你可以直接使用这个成员函数而无须定义一个System对象。
你所说的常成员函数是不是说加 了const的函数或者是一般的成员函数。如果是前者的话。我解释下
它加了const是因为可限制修改实参的值。但是你也许会问限制修改实参的值你可以直接给实参加个const就行,是的,实参前面也要加const。函数后面也要加。因为这样可以增加代码的可读性。
当然它也不能修改类其他数据成员的值
添加回答
举报
0/150
提交
取消