现在的位置: 首页 > 综合 > 正文

关于C++中类的static和const成员

2013年02月09日 ⁄ 综合 ⁄ 共 1235字 ⁄ 字号 评论关闭

1. static成员变量

类的static成员变量,当在头文件中声明后,应该再在类的源文件中定义一下:

如在Test.h中有如下代码:

#pragma once
class Test
{
private:
	static int data;
};

应该在Test.cpp中定义其成员变量data:

 

 

#include "Test.h"

int Test::data = 10;

注意定义data的代码不应该写在类的构造函数中,因为构造函数会被执行多次,同理也不应放在类的头文件中,因为头文件可能会被包含多次

 

2.static成员函数

类的static成员函数,是可以通过类名直接来调用的,这在很多情况下是比较方便的。但是类的static成员函数只能访问类的static成员变量和static成员函数,因为其没有this指针

3.const成员变量

类的const成员变量,只能在构造函数的成员初始化列表中进行初始化,而且在之后不能被修改。可以把类的一些只读变量设定为const

Test.h文件:

 

#pragma once
class Test
{
private:
	const int data;
};

Test.cpp文件:

 

 

#include "Test.h"

Test::Test(void) :
data(10)
{
}

 

4.const成员函数

类的const成员函数,具有const this的指针,因此也就不能更改类中的成员变量。不过这个有个特例,就是当成员变量声明为mutable时,它是可以被类的const成员函数更改的。

如果类的成员函数不对类的数据进行更改,则应该把此函数定义为const成员函数,首先它使类的接口更容易被理解,告诉调用者,这个函数不会对类的数据进行更改,其次,它可以扩大此函数的有效使用范围:

例如在Test类中有一个打印类的基本信息的函数,此函数对类的数据是只读的,如果没有把它设定为const,则const Test的实例就不能调用此函数,这在逻辑上不太合理。所以应该把它设定为const的成员函数,这样的话,Test的实例和const Test的实例都可以调用此函数了

5.static const成员变量

static const成员变量,在类的头文件中声明后,也类似于static成员变量,应该在类的源文件中再定义一下:

Test.h文件:

 

#pragma once
class Test
{
private:
	static const int data;
};

应该在Test.cpp中定义其成员变量data:

 

 

 

#include "Test.h"

const int Test::data = 10;

不过,对于int型的static const成员变量,可以在声明时直接定义它,如下:

 

#pragma once
class Test
{
private:
	static const int data = 10;
};

这样在Test.cpp中就不必再定义data了。但这仅仅是对int型才行得通。如果在上面把int换成float或是其他的,编译是通不过的。不知道为什么这样设计

 

抱歉!评论已关闭.