1.静态成员声明及意义
在类中声明,在类外定义。形式如下:
class type{
static int data;
};
int type::data=0;
注意:静态成员函数只能访问静态成员,非静态都可访问。访问方式:
a.通过类名
类名:: 静态数据成员
b.通过对象
类名 . 静态数据成员
例子:设计一个书类,能够保存书名、定价,以及所有书的本数和总价。
class Book {
private:
string bkname;
double price;
static int number;//静态成员保存书本数
static double totalPrice;//静态成员保存书总价
public:
Book() { bkname = ""; price = 0; number++; };
Book(string, double);
~Book();
void setName(string bname) { bkname = bname; }
void setPrice(double bprice) {
totalPrice -= price;
price = bprice;
totalPrice += price;
}
double getPrice() { return price; }
string getName() { return bkname; }
static int getNumber() { return number; }
static double gettotalPrice() { return totalPrice; }//用静态函数访问静态成员
void display();
};
Book::Book(string name, double Price) {
bkname = name;
price = Price;
number++;
totalPrice += price;
}
Book::~Book() {
number--;
totalPrice -= price;
}
void Book::display() {
cout << bkname << " " << price << endl;
cout << number << " " << totalPrice << endl;
cout << "静态量数" << getNumber() << endl;
}
int Book::number = 0;
double Book::totalPrice = 0;//在此定义后才会分配内存空间
int main() {
Book b1("chkk", 32.5), b2;
b2.setName("gjoie"); b2.setPrice(25);
cout << b1.getName() << " " << b1.getPrice ()<< endl;
cout << b2.getName() << " " << b2.getPrice() << endl;
cout << b1.getNumber ()<< endl;
{
Book b3("doe", 24);
cout << b3.getName() << " " << b3.getPrice() << endl;
cout << b1.getNumber() << " " << b1.gettotalPrice() << endl;
}
cout <<b1.getNumber() << " " << b1.gettotalPrice ()<< endl;
b1.display();
return 0;
}
输出结果:
chkk 32.5
gjoie 25
2
doe 24
3 81.5
2 57.5
chkk 32.5
2 57.5
静态量数2
分析结果我们可以看出,多一本书少一本书书本数和书总价会改变,静态变量如同全局变量但基于类的封装更好用。
静态成员很有用哦 理解了就好!