C++之静态成员

C++在类中提供了静态成员。这是非常有必要的,因为我们程序设计者是需要这样特性。

静态数据成员

对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。(类的每一个实例都共享这一个成员)无论这个类的对象被定义了多少个,静态数据成员在程序中只有一份拷贝,由该类型的所有对象共享访问。(包括派生类的对象)。这种需求我们还是经常有的。

C++提供了这样得方法,但是该方法得使用比较特殊。静态数据成员必须在类外初始化一下,否则会导致编译错误。

注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。

静态函数成员

静态函数成员也是属于整个类的,无需对象我们也能访问它。这样在大多数情况下可能会出错(比如你在没有创建对象的时候,访问了一个非静态数据成员),因此C++对静态成员函数做了限制。它只能操作类的静态数据成员和类的静态函数成员。类的普通函数可以访问它们。

这种函数也很有必要,因为他能在我们不创建对象的情况下,让我们知道类的静态数据成员是什么样子。因为我们在没有对象的情况下可以调用它。

#include<iostream>
using namespace std;

class MyClass
{
public:
	MyClass(int a=1);
	~MyClass();
	void fun(int q);
	static int fun(void);
	const void QWERTY(void);
private:
	int a;
	const static int b = 10;	//OK,编译没问题
	static int c;
};

MyClass::MyClass(int a)
{
	this->a = a;
	this->c = 33;
}

MyClass::~MyClass()
{
}

int MyClass::c = 100;		
//静态数据成员必须这样初始化一下,否则会导致编译错误;

inline void MyClass::fun(int g)
{
	cout << a << b << c << endl;
}
int MyClass::fun(void)
{
	cout << "随心所欲" << endl;
	return 0;
}

const void MyClass::QWERTY(void)
{
	//static 数据成员是类的所有对象共享的;
	//
	c = 100;		
	return void();
}
int main(char agrc, char **agrv)
{
	MyClass cla1(12);
	cla1.QWERTY();		
	cla1.fun(1);
	//MyClass::fun(12);不行,非静态成员函数必须通过对象来引用
	MyClass::fun();		//静态成员函数则可以
	system("pause");
	return 0;
}

 

发布了222 篇原创文章 · 获赞 174 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zy010101/article/details/105231201