静态成员变量 与 静态成员函数

//
//  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

参考文献

  • 《精通C++(第9版)》
posted @ 2019-04-29 20:42  芷恬  阅读(337)  评论(0编辑  收藏  举报