zoukankan      html  css  js  c++  java
  • 关于类中静态成员函数和静态成员变量的知识点

    类中的静态成员函数:

    1.函数的行为对所有派生类都一致时,可以声明为静态。

    2.因为静态成员函数只跟类有关跟类的实例无关,因此它不需要this指针

    3.静态成员函数由于是不与任何对象相关联的,所以是没有this指针的。从这里也可以知道静态成员函数无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其他的静态成员函数。即静态成员函数不能访问非静态成员(非静态成员函数或者非静态成员变量),但是非静态成员可以直接访问静态成员。

    例子:

    #include<iostream>
    using namespace std;
    class MyClass
    {
    public:
    	MyClass(int a, int b, int c);
    	static  void func();
    	void printf()
    	{
    		cout << sum << endl;
    	}
    private:
    	int a, b, c;
    	static int sum;//静态成员变量的声明
    };
    int MyClass::sum = 0;//静态成员变量必须在类外定义和初始化
    MyClass::MyClass(int a, int b, int c)
    {
    	this->a = a;
    	this->b = b;
    	this->c = c;
    	sum += a + b + c;
    }
    void MyClass::func()
    {
    	cout << sum << endl;
    }
    int main()
    {
    	MyClass A(1, 2, 3);
    	A.func();
    	A.printf();
    	MyClass B(4, 5, 6);
    	B.func();
    	B.printf();
    	//MyClass::printf();//错误,非静态成员函数必须与特定对象相对
    	MyClass::func();//静态成员函数是类中的所有对象共享的,并不但属于特定对象
    	return 0;
    }
    

      运行结果:

    类中的静态成员变量:

    1.静态成员变量是整个类的实例共享的

    2.静态成员变量存储在静态存储区/全局存储局,而非静态成员变量需要实例化才会分配内存。

    3.静态成员变量只能在类内声明在类外定义和初始化。

    为什么静态成员变量不能在类内定义?

    答:为了防止重复定义,静态成员变量是类的所有实例共享的,只需要定义一次就可以,如果在类内定义则每实例化一次类都会重新定义一次静态成员变量,这会产生重复定义。

    静态成员不能访问非静态成员,非静态成员可以直接访问类中的静态成员。

  • 相关阅读:
    今天看到的一些好文语句摘录
    laravel5 怎么获取数组形式的数据
    laravel5.4将excel表格中的信息导入到数据库中
    phpmax_execution_time
    laravel 5.4 导出excel表格
    使用php函数ini_set()重新设置某个配置的设置值
    艾伟_转载:VS.NET 2010 新功能 [整理] 狼人:
    艾伟_转载:[一步一步MVC]第五回:让TagBuilder丰富你的HtmlHelper 狼人:
    艾伟_转载:.NET 4.0中数组的新增功能 狼人:
    艾伟_转载:一个简单的 Generic Factory 类 狼人:
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9880244.html
Copyright © 2011-2022 走看看