`
waret
  • 浏览: 139688 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

static数据成员、static成员函数

 
阅读更多

类的static数据成员的引入:
不同对象之间共享访问,本质上是对该类型所有对象,只维持一份拷贝。

与全局变量相比,优势:
1. 静态数据成员仍然是在类域名字空间,没用进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能。
2. 可以实现信息隐藏,静态数据成员可以是private成员,全局变量不行。

使用static数据成员的注意事项:
1. 静态数据成员必须在类定义外初始化,但const静态数据成员除外,const静态数据成员可以在类体中初始化。

//类体c1.h
class c1
{
public:

private:
   static int num;
   static const  string name = "chio";
};
//类实现c1.cpp
#include "c1.h"

int c1::num = 20;
const string name ; //仍然需要在类体外定义
void c1::..

 


2. 类成员函数(无论是static成员函数或非static成员函数)都可以直接访问static数据成员。

3. 访问方式有两种:  object.static_var 或   classname::static_var


static数据成员的特殊性:
1. static数据成员的类型可以是其所属类,而非static数据成员类型只允许为该类的指针或引用。

class Bar
{
public
    //
private:
    static Bar mem1;//ok
    Bar *mem2;//ok
    Bar mem3; //error
};


2. 静态数据成员可以作为类成员函数的缺省参数,而非static成员不能。
分析:静态成员函数如果未初始化,系统自动会给它初始化为某个缺省值(如int初始化为0, 指针初始化为NULL等)。 所以一旦定义,其值已确定,可以作为类成员函数的缺省参数。

static成员函数的引入:
如果某成员函数只访问static数据成员,而不访问任何其他的数据成员(非static),那么此成员函数就与哪个对象来调用无关。

1. 只在类体的函数声明前加static, 类体外函数定义不能指定关键字static
2. 静态成员函数没有this指针
3. 访问方式也有两种

分享到:
评论

相关推荐

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

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

    const成员函数、初始化列表、static成员1

    C++ 编程语言 - const 成员函数、初始化列表、static 成员变量 C++ 编程语言中,const 成员函数、初始化列表、static 成员变量是三个重要的概念,它们在编程中发挥着重要的作用。 const 成员函数 在 C++ 中,...

    普通成员函数、类成员函数和类静态成员函数实例(VS2010)

    1. 普通成员函数(Non-static Member Functions): 普通成员函数是类的一部分,它们可以访问类的所有非静态成员,包括私有(private)、保护(protected)和公有(public)成员。这是因为每个普通成员函数都有一个...

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

    3. 静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。 4. 静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。 5. 静态数据成员的值在const成员函数中可以被合法的改变。 6. 类的静态...

    static变量和static函数的用法摘抄

    静态成员函数没有`this`指针,不能访问类的非静态成员变量,但可以直接访问静态成员变量。它们主要用于实现与类实例无关的功能,比如辅助计算、数据验证等。 2. **静态外部函数(内部函数)**: 当一个函数声明为`...

    静态数据成员与子对象

    在编程中,静态数据成员和静态成员函数是类的一个重要特性,它们与普通的成员变量和成员函数有所不同。静态数据成员属于类,而不是类的每个实例,这意味着所有类的实例共享同一份静态数据成员的副本。这使得静态数据...

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

    一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。...本例就是自己的研究成果,使用非静态的成员函数作为线程函数,还能修改类的非静态的数据成员。

    静态数据与成员函数

    在C++编程语言中,静态数据成员和静态成员函数是面向对象编程中非常重要的概念,它们允许我们在类的范围内共享数据,而不是局限于单个对象。下面将详细解释这两个概念。 首先,静态数据成员(Static Data Members)...

    C++将类的成员函数作为回调函数

    ### C++将类的成员函数作为回调函数 #### 背景与问题 在C++编程中,回调函数是一种常见的设计模式,它允许程序在特定的事件或条件下调用一个预先注册的函数。然而,当涉及到类的成员函数时,事情变得稍微复杂了...

    类的static,const,static const,const static成员的初始化

    类的static、const、static const、const static成员的初始化 在 C++ 编程中,static、const、static const 和 const static 是四个常见的概念,但它们的初始化方式却容易弄混淆。下面我们将对这四种成员变量的初始...

    C++静态成员函数小结

    静态成员函数可以分为两部分:静态数据成员和静态函数成员。 一、静态数据成员 静态数据成员是类中的全局变量,它们遵守public、protected和private访问规则。静态数据成员的定义需要在cpp文件中进行,而不能在...

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

    在C++编程语言中,类是面向对象编程的基础,它允许程序员定义包含数据成员(变量)和成员函数(方法)的复合数据类型。其中,静态成员变量和静态成员函数具有特殊的特性,它们在类的整个生命周期内共享单一实例,...

    面向过程设计中的static静态成员

    在类中,`static`关键字用于声明静态成员变量和静态成员函数。静态数据成员是类的所有实例共享的,也就是说,无论创建多少个对象,静态数据成员只有一份拷贝。静态成员函数没有`this`指针,不能访问非静态成员,但...

    static实例

    `static` 关键字用于定义类的静态成员,包括静态数据成员(变量)和静态成员函数(方法)。下面我们将详细讨论这两个方面的使用方法和实例。 首先,我们来看一下 `static` 数据成员。静态数据成员是属于类的所有...

    易语言源码实现易语言类静态数据成员的方法.7z

    这里,`staticValue`就是`MyClass`类的静态数据成员,所有`MyClass`的实例都可以访问它。 2. **初始化静态数据成员**: 易语言中,静态数据成员的初始化通常在类的初始化代码块中进行。由于静态数据成员不是每个...

    static 用法

    `static`关键字在C和C++中有多种用途,包括局部静态变量、外部静态变量/函数以及静态数据成员/成员函数。每种用途都有其独特的应用场景和注意事项,理解这些概念有助于更好地编写高质量的C/C++代码。

    C++中static关键字总结

    2. static成员函数不能被声明为const,因为const成员函数承诺不会修改所属对象的状态。 3. static成员函数也不能声明为virtual,因为它们与类的多态行为无关。 4. 在类外部定义static成员函数时,不需要再次使用...

    static成员变量不属于对象的一部分,而是类的一部分,所以程序可以在还没有诞生任何对象的时候就处理此种成员变量

    在C++编程语言中,`static`关键字用于修饰类的成员变量或成员函数,具有特殊的行为和用途。这里我们将深入探讨`static`成员变量的概念及其使用规则。 首先,`static`成员变量并不是属于类的每个对象实例的,而是...

    对象和作用域限制符::在调用成员函数时的区别

    这种方式要求必须有一个具体的对象存在,因为成员函数与特定的对象实例关联,它们处理或访问该对象的数据。例如,如果我们有一个名为`Person`的类,我们可以创建一个`Person`对象`p`,然后调用其成员函数`sayHello...

    C++中Static的使用方法

    - 静态成员函数不能访问非静态成员变量和非静态成员函数。 - 不能将静态成员函数定义为虚函数。 2. **取地址操作** - 静态成员函数的地址类型是非成员函数指针。 - 这种特性使得静态成员函数可以用作回调函数,...

Global site tag (gtag.js) - Google Analytics