请问以下这个程序,为何要声明为静态成员函数呢?求解释~

#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;
}

缥缈止盈
浏览 309回答 2
2回答

呼唤远方

静态成员函数是属于一个类的,而不是属于一个类对应的某个对象。好处是所有的对象共享一个静态的成员函数,节省内存。注意静态成员函数内不能改变非静态成员变量,由于你的例子中都是改变的是静态变量,所以静态成员函数的定义是可行的。void Product::display (){cout<<sum<<endl; //显示总和cout<<average()<<endl; //条用平均的成员变量,再显示出来}

Helenr

静态成员函数属于类 而非静态成员函数属于对象.之所以要用静态成员函数是因为静态成员函数可以用类名来引用他,而不用建立类的实例,非静态成员函数没有实例是不能使用的。这样就不用用到构造函数和析构函数了,能提高效率。。例如,drawRect成员函数使用了System.out.println成员函数,但实际上你却未曾创建一个某个System类的对象,这正是因为 out是System类的一个静态变量,所以你可以直接使用这个成员函数而无须定义一个System对象。你所说的常成员函数是不是说加 了const的函数或者是一般的成员函数。如果是前者的话。我解释下它加了const是因为可限制修改实参的值。但是你也许会问限制修改实参的值你可以直接给实参加个const就行,是的,实参前面也要加const。函数后面也要加。因为这样可以增加代码的可读性。当然它也不能修改类其他数据成员的值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python
Java