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;//
定义(
初始化)
时不受private
和protected
访问限制.
注:不要试图在头文件中定义(
初始化)
静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#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++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。...
C++静态成员函数小结 静态成员函数是C++中一个非常重要的概念,特别是在类设计和对象编程中。静态成员函数可以分为两部分:静态数据成员和静态函数成员。 一、静态数据成员 静态数据成员是类中的全局变量,它们...
C++中的静态成员函数是一种特殊类型的成员函数,它不依赖于类的实例存在,而是直接与类本身相关联。在理解和使用静态成员函数时,有以下几个关键知识点: 1. **定义**: 静态成员函数的定义与普通成员函数不同,...
当我们讨论"关于C++静态成员函数访问非静态成员变量的问题"时,我们需要深入理解这两种类型的成员函数的工作原理。 首先,静态成员函数是属于类的,而不是类的实例或对象。这意味着它们可以在没有创建任何对象的...
C++中的静态成员函数是类的一个重要特性,它们在程序设计中扮演着独特角色。静态成员函数和静态数据成员有着显著的特点和用途。 一、静态数据成员 静态数据成员是类的共享属性,不依赖于类的任何实例,而是属于...
在C++编程语言中,静态成员函数和非静态成员函数有着显著的区别,这些差异主要体现在它们的作用域、存储方式以及如何访问类的成员。本文将深入探讨为什么C++的静态成员函数不能调用非静态成员变量,并通过示例进行...
大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C++灵活性下面,类还具备了静态成员和静态函数,即 ...
C++ 中静态成员函数与非静态成员函数的区别 在 C++ 编程语言中,静态成员函数和非静态成员函数是两种不同的函数成员,它们在类中的定义、访问和使用方式存在着本质的区别。 一、静态成员函数 静态成员函数是类的...
一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...
本篇将通过两个实例——静态成员函数和静态数据成员,深入探讨它们在C++中的应用。 首先,我们来看静态成员函数。在C++中,静态成员函数可以被类的所有对象共享,它并不持有隐含的`this`指针,因此不能访问非静态...
C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习...
### 通过函数指针调用C++非静态成员函数 在C++编程中,通过函数指针调用非静态成员函数是一种高级技巧,主要用于实现回调、动态绑定等场景。本文将详细探讨如何在Visual C++ 6.0 (VC6.0) 和Borland C++ Builder 6.0...
### C++静态成员变量与静态成员函数详解 #### 静态成员变量 在C++中,静态成员变量是类的一个特殊成员,它被所有该类的对象所共享。这意味着无论创建多少个对象,静态成员变量都只有一个副本存在于内存中。 **...
### C++类与对象:static静态数据成员与静态成员函数详解 #### 静态成员函数:类的公共工具箱 在C++编程语言中,类的**静态成员函数**扮演着一种特殊的角色,它既不属于任何特定的对象实例,而是整个类的属性。...
### C++类中的静态成员变量和静态成员函数的作用 #### 静态成员变量与静态成员函数概述 在C++编程语言中,类是面向对象编程的基础,它允许程序员定义包含数据成员(变量)和成员函数(方法)的复合数据类型。其中...
在C++编程语言中,静态成员变量和静态成员函数是类的重要组成部分,它们与非静态成员有着显著的区别。本文将详细解析这两种特性的使用方法。 首先,我们来看静态成员变量。静态成员变量是通过在变量声明前加上`...
在C++中,成员函数具有对象的隐含上下文,即`this`指针,这使得它们不能直接用作标准的回调函数,因为非静态成员函数需要一个关联的对象实例来调用。然而,通过一些技巧和设计模式,我们可以实现类成员函数作为回调...
C++中静态成员函数的用法解析