C/C++培训
达内IT学院
400-996-5531
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;
}
免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved