C++中的类静态成员和静态成员函数
当前位置:以往代写 > C/C++ 教程 >C++中的类静态成员和静态成员函数
2019-06-13

C++中的类静态成员和静态成员函数

C++中的类静态成员和静态成员函数

(1)为什么需要类静态成员?

有时候某个类的多个工具需要会见一个全局工具,在这种环境下“提供一个全局工具”比“每个类都维持一个独立的数据成员”要更为有效。而类静态成员与全局变量对比,又有两点长处:(a)不存在与措施中其他全局名字斗嘴的大概性;(b)可配置为private,实现信息埋没。

(2)类静态成员的特点

对付非静态数据成员,每个类工具都有本身的拷贝,而静态数据成员对每个类范例只有一个拷贝。由于静态数据成员分派在全局数据区,因此在措施开始运行时就必需存在,故静态数据成员的空间分派和初始化不行能在main函数或其他函数中完成(因而在局部类中也不答允呈现静态数据成员)。这样一来,静态数据成员的空间分派和初始化只大概有以下三种途径:(a)类的头文件:这里有类的声明。但存在一个无法回避的问题:对付静态数据成员,在措施中也只能存在一个界说,而类的头文件大概被反复引用而呈现反复界说;(b)main函数前的全局数据声明和界说处:这种要领也有问题,每一个利用该类的措施都必需在此处界说一下该类的静态成员,这是不现实的;(c)类界说的内部实现:这是最为抱负的方法,引用时只需包括头文件即可。

#include "account.h"
double Account::_interestRate = 0.05

(3)类静态成员的界说

在对静态数据成员举办界说时有以下几点留意事项:(a)在类界说之外界说时,静态成员的名字必需被其类名限定修饰,前不行再添加static;(b)像int等有序范例的静态数据成员可在类界说中初始化,但仍需在类界说外举办界说,但此时已不能指定初始值;

// 头文件
class Account
{
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
};
// 文本文件
const int Account::nameSize; // 必须的成员界说,此处不行再举办初始化
const char Account::name[nameSize] = "Saving Account";

(4) 类静态成员的会见:

在类的成员函数中可以直接会见该类的静态数据成员,而在非成员函数中可利用成员会见操纵符或类名限定修饰的方法举办会见。

(5)静态成员函数:

静态成员函数无法会见属于详细类工具的非静态数据成员,也无法会见非静态成员函数,他只能会见静态数据成员和挪用其余的静态成员函数。这样一来,就能防备类的非静态数据成员蒙受篡改。静态成员函数没有this指针,任安在静态成员函数中显式或隐式地引用这个指针都将导致编译时刻错误。

    关键字:

在线提交作业