`
JonsenElizee
  • 浏览: 46781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C++静态成员函数

阅读更多

C++ 静态成员函数小结

静态数据成员 ... 1

1. 静态数据成员的定义 ... 1

2. 静态数据成员被 的所有对象所共享(包括该类派生类的对象) ... 2

3. 静态数据成员可以成为成员函数的可选参数(普通数据成员则不可以) ... 2

4. ★静态数据成员的类型可以是所属类的类型(普通数据成员则不可以) ... 3

5. 静态数据成员的值在 const 成员函数中可以被合法的改变 ... 3

静态成员函数 ... 4

1. 静态成员函数的地址可用普通函数指针储存(普通成员函数地址需要用 类成员函数指针来储存) 4

2. 静态成员函数不可以调用类的非静态成员 ... 4

3. 静态成员函数不可以同时声明为 virtual const volatile 函数 ... 4


静态类成员包括静态数据成员和静态函数成员两部分。

静态数据成员

类体中的数据成员的声明前加上static 关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private 访问规则。同时,静态数据成员还具有以下特点:

1. 静态数据成员的定义

静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义( 初始化) 不应该被放在头文件中。

其定义方式与全局变量相同。举例如下:

xxx.h 文件

class base{

private:

static const int _i;// 声明,标准c++ 支持有序类型在类体中初始化,vc6 不支持。

};

xxx.cpp 文件

const int base::_i=10;// 定义( 初始化) 时不受privateprotected 访问限制.

注:不要试图在头文件中定义( 初始化) 静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif 或者#pragma once 也不行。

2. 静态数据成员被 的所有对象所共享(包括该类派生类的对象)

即派生类对象与基类对象共享基类的静态数据成员。举例如下:

class base{

public :

static int _num;// 声明

};

int base::_num=0;// 静态数据成员的真正定义

class derived:public base{

};

main()

{

base a;

derived b;

a._num++;

cout<<"base class static data number _num is"<<a._num<<endl;

b._num++;

cout<<"derived class static data number _num is"<<b._num<<endl;

}

// 结果为1,2; 可见派生类与基类共用一个静态数据成员。

3. 静态数据成员可以成为成员函数的可选参数(普通数据成员则不可以)

举例如下:

class base{

public :

static int _staticVar;

int _var;

void foo1(int i=_staticVar);// 正确,_staticVar 为静态数据成员

void foo2(int i=_var);// 错误,_var 为普通数据成员

};

4. ★静态数据成员的类型可以是所属类的类型(普通数据成员则不可以)

普通数据成员的只能声明为 所属类类型的指针或引用。举例如下:

class base{

public :

static base _object1;// 正确,静态数据成员

base _object2;// 错误

base *pObject;// 正确,指针

base &mObject;// 正确,引用

};

5. 静态数据成员的值在 const 成员函数中可以被合法的改变

举例如下:

这个特性,我不知道是属于标准c++ 中的特性,还是vc6 自己的特性。

class base{

public:

base(){_i=0;_val=0;}

mutable int _i;

static int _staticVal;

int _val;

void test() const{//const 成员函数

_i++;// 正确,mutable 数据成员

_staticVal++;// 正确,static 数据成员

_val++;// 错误

}

};

int base::_staticVal=0;

静态成员函数

静态成员函数没有什么太多好讲的。

1. 静态成员函数的地址可用普通函数指针储存(普通成员函数地址需要用 类成员函数指针来储存)

举例如下:

class base{

static int func1();

int func2();

};

int (*pf1)()=&base::func1;// 普通的函数指针

int (base::*pf2)()=&base::func2;// 成员函数指针

2. 静态成员函数不可以调用类的非静态成员

因为静态成员函数不含this 指针。

3. 静态成员函数不可以同时声明为 virtual const volatile 函数

举例如下:

class base{

virtual static void func1();// 错误

static void func2() const;// 错误

static void func3() volatile;// 错误

};

分享到:
评论

相关推荐

    C++静态成员函数与静态成员变量小结

    "C++静态成员函数与静态成员变量小结" 静态成员在C++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。...

    C++静态成员函数小结

    C++静态成员函数小结 静态成员函数是C++中一个非常重要的概念,特别是在类设计和对象编程中。静态成员函数可以分为两部分:静态数据成员和静态函数成员。 一、静态数据成员 静态数据成员是类中的全局变量,它们...

    C++静态成员函数的说明及使用

    C++中的静态成员函数是一种特殊类型的成员函数,它不依赖于类的实例存在,而是直接与类本身相关联。在理解和使用静态成员函数时,有以下几个关键知识点: 1. **定义**: 静态成员函数的定义与普通成员函数不同,...

    关于C++静态成员函数访问非静态成员变量的问题

    当我们讨论"关于C++静态成员函数访问非静态成员变量的问题"时,我们需要深入理解这两种类型的成员函数的工作原理。 首先,静态成员函数是属于类的,而不是类的实例或对象。这意味着它们可以在没有创建任何对象的...

    C++静态成员函数小结.doc

    C++中的静态成员函数是类的一个重要特性,它们在程序设计中扮演着独特角色。静态成员函数和静态数据成员有着显著的特点和用途。 一、静态数据成员 静态数据成员是类的共享属性,不依赖于类的任何实例,而是属于...

    C++静态成员函数不能调用非静态成员变量(详解)

    在C++编程语言中,静态成员函数和非静态成员函数有着显著的区别,这些差异主要体现在它们的作用域、存储方式以及如何访问类的成员。本文将深入探讨为什么C++的静态成员函数不能调用非静态成员变量,并通过示例进行...

    C++静态成员函数访问非静态成员的几种方法

    大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C++灵活性下面,类还具备了静态成员和静态函数,即 ...

    C++ 中静态成员函数与非静态成员函数的区别

    C++ 中静态成员函数与非静态成员函数的区别 在 C++ 编程语言中,静态成员函数和非静态成员函数是两种不同的函数成员,它们在类中的定义、访问和使用方式存在着本质的区别。 一、静态成员函数 静态成员函数是类的...

    C++非静态成员函数完全可以作为线程函数

    一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...

    c++静态成员使用实例

    本篇将通过两个实例——静态成员函数和静态数据成员,深入探讨它们在C++中的应用。 首先,我们来看静态成员函数。在C++中,静态成员函数可以被类的所有对象共享,它并不持有隐含的`this`指针,因此不能访问非静态...

    C++中静态成员函数与静态成员变量(static )

    C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习...

    通过函数指针调用C++非静态成员函数

    ### 通过函数指针调用C++非静态成员函数 在C++编程中,通过函数指针调用非静态成员函数是一种高级技巧,主要用于实现回调、动态绑定等场景。本文将详细探讨如何在Visual C++ 6.0 (VC6.0) 和Borland C++ Builder 6.0...

    C++静态成员变量和静态成员函数

    ### C++静态成员变量与静态成员函数详解 #### 静态成员变量 在C++中,静态成员变量是类的一个特殊成员,它被所有该类的对象所共享。这意味着无论创建多少个对象,静态成员变量都只有一个副本存在于内存中。 **...

    C++类与对象:static静态数据成员静态成员函数.doc

    ### C++类与对象:static静态数据成员与静态成员函数详解 #### 静态成员函数:类的公共工具箱 在C++编程语言中,类的**静态成员函数**扮演着一种特殊的角色,它既不属于任何特定的对象实例,而是整个类的属性。...

    C++类中的静态成员变量和静态成员函数的作用

    ### C++类中的静态成员变量和静态成员函数的作用 #### 静态成员变量与静态成员函数概述 在C++编程语言中,类是面向对象编程的基础,它允许程序员定义包含数据成员(变量)和成员函数(方法)的复合数据类型。其中...

    C++静态成员变量和静态成员函数的使用方法总结

    在C++编程语言中,静态成员变量和静态成员函数是类的重要组成部分,它们与非静态成员有着显著的区别。本文将详细解析这两种特性的使用方法。 首先,我们来看静态成员变量。静态成员变量是通过在变量声明前加上`...

    c++类成员函数作为回调函数

    在C++中,成员函数具有对象的隐含上下文,即`this`指针,这使得它们不能直接用作标准的回调函数,因为非静态成员函数需要一个关联的对象实例来调用。然而,通过一些技巧和设计模式,我们可以实现类成员函数作为回调...

    C++中静态成员函数的用法解析

    C++中静态成员函数的用法解析

Global site tag (gtag.js) - Google Analytics