C++面向对象入门(十三)静态成员函数

静态成员函数
特点:
所有类对象共享一个成员函数
可以通过类名调用(使用public修饰), 也可以通过对象调用
只能访问静态成员变量, 即使未定义任何类对象, 静态成员函数仍然调用(类名调用), 假设能访问非静态成员变量, 编译器无法找到该变量所占的内存, 故假设不成立, 无法访问非静态成员变量
#include <iostream>
#include <string>

using namespace std;

/**
 * 静态成员函数
 * 特点:
 * 所有类对象共享一个成员函数
 * 可以通过类名调用(使用public修饰), 也可以通过对象调用
 * 只能访问静态成员变量, 即使未定义任何类对象, 静态成员函数仍然调用(类名调用), 假设能访问非静态成员变量, 编译器无法找到该变量所占的内存, 故假设不成立, 无法访问非静态成员变量
 */
class Rider {
private:

    string name;
    string status;
    string driver;

    static void printManufacturer2() {
        cout << "The manufacturer is " << manufacturer << endl;
    }
public:
    static string manufacturer;

    Rider() {}

    Rider(const string &name, const string &status, const string &driver);

    ~Rider() {

    }

    static void printManufacturer() {
        cout << "The manufacturer is " << manufacturer << endl;
//        cout << "The manufacturer is " << name << endl;
        //error: Invalid use of member "name" in static member function
    }

    void showInfo() {
        cout << "{name:" << name << ", status:" << status << ", driver:" << driver << ", manufacturer:" << manufacturer
             << "}" << endl;
    }

};

//类外初始化静态成员变量(个人觉得类外定义更贴切)
//语法
//数据类型 类名::静态成员变量名 = 值;
string Rider::manufacturer = "Toei Tokyo";

Rider::Rider(const string &name, const string &status, const string &driver) : name(name), status(status),
                                                                               driver(driver) {}
void test1() {
    Rider::printManufacturer();
//    Rider::printManufacturer2();
    //error: 'printManufacturer2' is a private member of Rider
}
int main() {
    test1();
    system("pause");

    return 0;
}

 



posted @ 2020-08-19 14:26  DNoSay  阅读(264)  评论(0)    收藏  举报