zoukankan      html  css  js  c++  java
  • c++:类中的static成员

    首先静态成员可以是public的,也可以是private的,只需在一般的变量、函数声明语句前加上static关键字即可声明一个static变量。

    类中的静态成员存在与任何对象之外,所有该类对象的共享一个static成员。

    静态成员对象不与任何对象绑定在一起,包括this指针。静态成员函数不能声明为const的,也不能在static函数体中使用this指针。

    可以直接使用作用与运算符访问静态成员,同时可以通过类的对象,引用或者指针来访问static成员,尽管它们有时是private成员。成员函数可以直接使用static成员。

    类的静态成员函数可以在类的内部或外部定义,当在外部定义时,不能重复关键字static。但类的静态成员变量必须在外部定义和初始化,且在任何函数之外,一个静态数据成员只能定义一次。

    class Account {
    public:
        Account() = default;
        Account(const std::string &s, double amt):
            owner(s), amount(amt) { }
    
        void calculate() { amount += amount * interestRate; }
        double balance() { return amount; }
    public:
        static double rate() { return interestRate; }
        static void rate(double);   
    private:
        std::string owner; 
        double amount = 0.0;
        static double interestRate; 
        static double initRate() { return .0225; }
        static const std::string accountType;
        static constexpr int period = 30;// period is a constant expression
        double daily_tbl[period];
    };
    
    const string Account::accountType("Savings Account");
    double Account::interestRate = initRate();//在类以及任何函数之外定义static成员,以及类名之后的部分属于类的作用域之内,因此可以直接使用initRate函数。
    
    void Account::rate(double newRate) 
    {
        interestRate = newRate; 
    }

      注意:虽然interestRate在类内部已经声明,但必须要在类外部定义后,才能使用它!

    然而,例外的是,我们可以为静态成员提供const整数类型的类内初始值,但要求该静态成员必须是字面值常量constexpr。

  • 相关阅读:
    LOJ#6501. 「雅礼集训 2018 Day4」Cube 题解
    LOJ#6510. 「雅礼集训 2018 Day8」A 题解
    LOJ#6513. 「雅礼集训 2018 Day10」足球大战 题解
    LOJ#6507. 「雅礼集训 2018 Day7」A 题解
    LOJ#6038. 「雅礼集训 2017 Day5」远行 题解
    Luogu P4208 [JSOI2008]最小生成树计数
    CodeForces 916D Jamie and To-do List
    CodeForces 573B Bear and Blocks
    CodeForces 460C Present
    CodeForces 786B Legacy
  • 原文地址:https://www.cnblogs.com/loversinJapan/p/4970016.html
Copyright © 2011-2022 走看看