欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-27 14:00:03
``` // // main.cpp // 静态成员变量 // 静态成员函数 // Created by mac on 2019/4/29. // Copyright © 2019年 mac. All rights reserved. // 如果一个成员变量被声明为static,那么该类的所有对象都 ......
//
//  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版)》