码迷,mamicode.com
首页 > 其他好文 > 详细

关于类中静态成员函数和静态成员变量的知识点

时间:2018-10-30 23:57:49      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:静态成员变量   public   highlight   name   运行   func   产生   iostream   成员函数   

类中的静态成员函数:

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.静态成员变量只能在类内声明在类外定义和初始化。

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

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

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

关于类中静态成员函数和静态成员变量的知识点

标签:静态成员变量   public   highlight   name   运行   func   产生   iostream   成员函数   

原文地址:https://www.cnblogs.com/wuyepeng/p/9880244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!