更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++静态成员讲解

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2020-04-09 17:16

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;

}

免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C语言对编程学习的重要性!你知道吗?
下一篇:C#窗体布局方式详解

C语言宏定义的几种使用方法

C与C++内存管理避坑指南

C/C++代码规范注释有哪些讲究?

C语言中,全局变量滥用的后果竟如此严重?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省