//
// main.cpp
// 静态成员变量
// 静态成员函数
// Created by mac on 2019/4/29.
// Copyright © 2019年 mac. All rights reserved.
// 若是一个成员变量被声明为static,那么该类的全部对象均可以访问该变量。
// 若是一个成员函数被声明为static,那么他能够在类的任何实例化以前被调用。
// 成员函数加上const以后,就不能在此成员函数中对成员变量进行修改了。这个修改包括改变数值大小,赋值操做等。
// 能够建立一个由同一个类的全部对象共享的成员变量。要建立这样的成员,只须要将关键字static放在变量声明的前面
// 注意:声明提供了有关变量或函数的存在和类型的信息 而定义则提供了声明中包含的全部信息,另外还将为被定义的变量与函数分配内存
// 静态成员变量必须在类中声明,并在类外部进行定义。
// 纯虚函数就是C++的接口
// 静态成员函数没法访问非静态变量
#include <iostream>
using namespace std;
class Widget{
private:
double price;
int quantity;
public:
Widget(double p,int q){
price=p;
quantity=q;
}
double getPrice() const{
return price;
}
int getQuantity() const{
return quantity;
// quantity++; //报错,不能对成员变量进行修改。
}
};
class StatDemo{
private:
static int x;//静态成员的声明
int y;
public:
void setx(int a) const{x=a;}
void sety(int b) {y=b;} //此处对成员函数进行const是错误的
int getX(){return x;}
int getY(){return y;}
static int addSame();
};
int StatDemo::addSame(){
return x+x; //静态成员函数只能访问静态成员变量
}
int StatDemo::x;//静态成员的定义
int main(int argc, const char * argv[]) {
Widget w1(14.5,100),w2(12.75,500);
cout<<w1.getQuantity()<<" "<<w2.getQuantity()<<endl;
StatDemo obj1,obj2;
obj1.setx(5);
obj1.sety(10);
obj2.sety(20);
cout<<obj1.getX()<<" "<<obj2.getX()<<endl;
cout<<obj1.getX()<<" "<<obj2.getY()<<endl;
return 0;
}
运行结果
100 500
5 5
5 20
Program ended with exit code: 0
参考文献