- 1. 静态数据成员
- 2. 静态成员函数
- 3. 习题
静态数据成员是一种特殊的数据成员,他以关键字static开头
static int height;
-
静态数据成员不属于某一个对象,在为对象分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用
-
静态数据成员可以初始化,但只能在类体外进行初始化
一般形式为:数据类型 类名::静态数据成员名 = 初值
int Box::height = 10;
-
静态数据成员既可以通过对象名引用,也可以通过类名来引用
cout << Box::height << endl;
成员函数也可以定义为静态,在类中声明函数的前面加static就成了静态成员函数
static int volume();
如果要在类外调用静态成员函数,要用类名和域运算符::
Box::volume();
静态成员函数与非静态成员函数的根本区别在于:静态成员函数没有this指针,因为它不属于某一个对象,他与任何对象都无关,这就意味着静态成员函数可以直接引用类中的静态数据成员,而不能默认访问非静态数据成员。若要在静态成员函数中访问非静态数据成员,需要通过成员运算符进行指定,如下代码为静态成员函数体内
cout << width << endl; // 若width已声明为静态数据成员,合法 cout << a.width << endl; // 若width为非静态数据成员3. 习题
商店销售某一商品,商店每天公布统一的折扣。同时允许销售人员在销售时灵活掌握售价,再次基础上,对一次购10件以上者,还可以销售9.8折优惠。现一直当天3名销货员的销售情况为:
| 售货员号(num) | 售货件数(quantity) | 售货单价(price) |
|---|---|---|
| 101 | 5 | 23.5 |
| 102 | 12 | 24.56 |
| 103 | 100 | 21.5 |
请编写程序,计算当日次商品的总销售款sum,以及没见商品的品骏售价。要求用静态数据成员和静态成员函数。(提示:将折扣discount、总销售款sum、商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和dispaly(输出结果))
#includeusing namespace std; class Buy { public: Buy(float ,float); void display(); void total(Buy &); static float average(); private: float quantity,price; static float discount,sum,n; }; float Buy::discount = 0.98; float Buy::sum = 0; float Buy::n = 0; Buy::Buy(float q,float p):quantity(q),price(p){} void Buy::display() { cout << "Total sales = " << sum << endl; cout << "average = " << average() << endl; } void Buy::total(Buy &b) { if(b.quantity <= 10) { sum += b.quantity * b.price; } else { sum += b.quantity * b.price * discount; } n += b.quantity; } float Buy::average() { return (sum / n); } int main() { Buy b1(5, 23.5); b1.total(b1); Buy b2(12, 24.56); b2.total(b2); Buy b3(100, 21.5); b3.total(b3); b3.average(); b3.display(); return 0; }
下一章:友元 & 类模板



