C++类中的static成员学习总结
2017-04-30 21:00
239 查看
C++类中的static成员学习总结
前提
C++类背后蕴含数据抽象和封装思想。数据抽象是一种依赖于接口和实现分离的编程技术。封装是一项将低层次的元素组合起来形成的新的、高层次实体。
对于类而言C++的全局对象会破坏封装:全局对象需要支持特定类的抽象的实现。因为C++类是数据抽象和封装的结果,在定义类的时候只是类成员的声明没有实现。如果某个类的全体对象需要访问一个全局对象,在定义类的时候就需要进行初始化且能够被随意的调用。因此,如果有某个类的全体对象需要访问一个全局对象的需求时,应该在类中定义static成员来代替全局对象。
2)可以实施封装。static成员可以是私有成员,而全局对象不可以。
3)static成员与特定的类是关联的。提高了程序的可读性。
const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。
/*
fileName:staticTest.h
*/
#ifndef TEST
#define TEST
#include <iostream>
using namespace std;
class StaticClass{
public:
int retValue(){
return value;
}
char retChar(){
return str;
}
void setValue( int a){
value = a ;
}
private:
//声明一个static int 变量。
static int value;
//声明一个const static char 变量。并用'c'对变量进行了初始化。
const static char str='c';
};
#endif
/*
fileName:staticTest.cpp
*/
#include "staticTest.h"
//定义static int value
int StaticClass::value = 1;
//定义 const static char str
const char StaticClass::str ;
编译与运行:
[root@localhost class]# g++ -c staticTest.cpp
[root@localhost class]# g++ -c main.cpp
[root@localhost class]# g++ -o test main.o staticTest.o
[root@localhost class]# ./test
100
c
总结
如果一个类需要访问一个全局对象,可以使用static成员变量或成员函数来代替。
前提
C++类背后蕴含数据抽象和封装思想。数据抽象是一种依赖于接口和实现分离的编程技术。封装是一项将低层次的元素组合起来形成的新的、高层次实体。对于类而言C++的全局对象会破坏封装:全局对象需要支持特定类的抽象的实现。因为C++类是数据抽象和封装的结果,在定义类的时候只是类成员的声明没有实现。如果某个类的全体对象需要访问一个全局对象,在定义类的时候就需要进行初始化且能够被随意的调用。因此,如果有某个类的全体对象需要访问一个全局对象的需求时,应该在类中定义static成员来代替全局对象。
类的static成员的优点
1)static成员的名字是在类的作用域中。可以避免与其他类的成员或全局对象名字冲突。2)可以实施封装。static成员可以是私有成员,而全局对象不可以。
3)static成员与特定的类是关联的。提高了程序的可读性。
static成员函数
static成员函数不是任何对象的组成部分。因此static成员函数没有this指针。static成员函数不能使用const声明。因为const的作用就是承诺不修改该函数的所属对象。static成员函数不能被声明为虚函数。static成员变量
static数据成员可以声明为任意类型。但是static数据成员必须在类定义体的外部定义。static成员不是通过类构造函数进行初始化,应该在定义时进行初始化。const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。
访问static成员
static成员遵循正常的公有/私有访问规则。/*
fileName:staticTest.h
*/
#ifndef TEST
#define TEST
#include <iostream>
using namespace std;
class StaticClass{
public:
int retValue(){
return value;
}
char retChar(){
return str;
}
void setValue( int a){
value = a ;
}
private:
//声明一个static int 变量。
static int value;
//声明一个const static char 变量。并用'c'对变量进行了初始化。
const static char str='c';
};
#endif
/*
fileName:staticTest.cpp
*/
#include "staticTest.h"
//定义static int value
int StaticClass::value = 1;
//定义 const static char str
const char StaticClass::str ;
/* fileName:main.cpp */ #include "staticTest.h" int main(){ StaticClass a; a.setValue(100); cout<<a.retValue()<<endl; cout<<a.retChar()<<endl; }
编译与运行:
[root@localhost class]# g++ -c staticTest.cpp
[root@localhost class]# g++ -c main.cpp
[root@localhost class]# g++ -o test main.o staticTest.o
[root@localhost class]# ./test
100
c
总结
如果一个类需要访问一个全局对象,可以使用static成员变量或成员函数来代替。
相关文章推荐
- C++类中各种不同类型成员根据是否static 、是否const类型的初始化方法不尽相同,写代码时经常搞乱,网上搜了一下资料,全部总结一下。一、例子 [cpp] view plaincopy ---
- C++类的静态成员(static members in classes)
- c++类中成员变量的初始化总结
- c++学习笔记--类的static静态成员
- C++类的static数据成员和static函数的定义(define)
- 重踏学习Java路上_Day07(成员与局部变量,形参,匿名对象,封装,private,this,构造与成员方法,static)
- c++ primer 学习笔记:类之static 类成员
- C++类中的static数据成员,static成员函数
- C++类的static(静态)成员
- JNI学习总结之:java调用native函数以及native函数回调java类成员方法
- C++类中的static数据成员,static成员函数
- C++类特殊数据成员总结(常数据成员、静态数据成员、静态常数据成员)
- C++类的成员函数使用的一些小总结
- 类别,属性,成员变量,arc学习总结
- C++类中的static数据成员,static成员函数
- C++ 学习总结(十)——C++类与对象,及构造函数,析构函数,拷贝构造函数
- C++类中const, static, reference等类型成员的初始化
- java基础学习总结——static关键字
- Cpp -C++类中成员变量的初始化总结
- C++ Primer 学习笔记_53_类与数据抽象 --友元、static成员