• 学习:类和对象——静态成员变量和函数


    静态成员:

    静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

    静态成员分为: 静态成员变量和静态成员函数,其中这两个特点如下

    静态成员变量:

    特点1、所有对象共享同一份数据
    特点2、在编译阶段分配内存
    特点3、类内声明,类外初始化

    静态成员函数:

    特点1、所有对象共享同一个函数
    特点2、静态成员函数只能访问静态成员变量


    静态成员变量:
    示例代码:

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class Person {
    
    public:
    	Person() {
    		cout << this->b << endl;
    	}
    	
    public:
    	static int a; //定义一个共享静态成员变量
    private:
    	static int b; //定义一个私有静态成员变量
    };
    
    int Person::a = 1;
    int Person::b = 2;
    
    
    void test01() {
    	Person p1;
    	cout << p1.a << endl; // 生成p1的对象 直接访问不可以,因为没有在外部对静态成员进行初始化
    	//cout << p1.b << endl; //无法进行访问,因为静态变量b是私有的
    
    	//由于静态成员变量是存在于全局区的,所以我们可以直接通过类名进行访问
    	cout << Person::a << endl;
    	//cout << Person::b << endl;
    
    }
    
    int main() {
    	test01();
    	
    	system("pause");
    	return 0;
    }
    

    静态成员函数:

    静态成员函数特点:
    特点1、程序共享一个函数
    特点2、静态成员函数只能访问静态成员变量

    示例代码

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    
    class Person {
    public:
    	Person(int a) {
    		this->a = 10;
    	}
    
    	static void to_visit() { // 静态函数可以访问静态变量,但是无法访问类中的变量,原因也很好理解,无法区别到底是哪个对象的a成员变量
    		cout << "这是公共静态成员函数" << endl;
    		cout << a << endl;
    	}
    
    public:
    	static int a;
    private:
    	static void to_visit_s() { //同样的也有私有静态成员函数
    		cout << "这是私有静态成员函数" << endl;
    	}
    };
    
    int Person::a = 1;
    
    int main() {
    
    	Person p1(10);
    	cout << p1.a << endl;
    	Person::to_visit();//同样也可以通过类名进行访问静态成员函数
    	p1.to_visit(); //通过对象访问静态成员函数
    	//Person::to_visit_s();
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    CentOS中怎样卸载旧版本Git并安装高版本Git
    下载抖音无水印视频工具 python webdriver 2020.09.02
    axel-2.17.9 aria2c-1.35.0 wget-1.20.3 curl-7.72.0 最新CLI下载工具在win10环境测试下载速度
    wget-1.20.3 static for win32
    undefined reference to `inet_pton' under MSYS
    undefined reference to `gnutls_protocol_set_priority'
    wget2 for windows 2020.08.28
    Unicode转义(uXXXX)的编码和解码 go-nascii 类似于 native2ascii
    正则表达式零宽断言 grep sift ripgrep(rg)
    编译 jq git版本
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/11863233.html
Copyright © 2020-2023  润新知