C++数据成员

简介:

Static成员

class B
{
public :
static int  val;
};
int B::val=0;
class D :public B
{
 
};
int _tmain(int argc, _TCHAR* argv[])
{
B::val=5;
cout <<D::val<<endl;//5
}


说明:static成员变量在继承体系中只有一份,其访问方式限制(public,private)和普通成员变量相同,但注意使用类名访问时应该B::val而不是B.val(与C#不同)。

 

Data member 的存取

1. static data member

(1) 每一个static member的存取,并不会造成任何空间或执行时间上的负担。

另外 如果有Point org,*p=&org;

则org.x=0与p->x=0执行开销完全相同,这也是唯一一种情况,因为static member并不在对象中,这只是个语法上的便宜行事而已。

(2)即使这个static member是经过虚拟或间接继承而来的,依然不影响他的存取效率。因为他是程序中的唯一实体。

(3)两个类有同名的static member并不会造成名字冲突,因为属于不同的Class,会被C++名字修饰机制修饰成不同名字。

(4)另外,如果取一个static member的地址会得到一个指向其数据类型的指针(如 int*),而不是一个指向其class member的指针。因为static member并不在一个class object之中。

 

2. Nonstatic Data Member

(1) 欲对一个nanstatic data member进行存取,编译器需要使用对象的地址加上data member的偏移量(offset)。(data member的偏移量可在编译期获得)

(2) 对于org.x=0与p->x=0的存取效率,当x是一个直接类成员,或者在单一继承、多继承中(多继承中offset也是在编译期计算好的),两者效率完全相同,但是如果x是虚基类的成员,则后者的存取效率会慢一些。因为编译器不能确定p指向的基类还是派生类,而指向不同的类,虚基类的位置是不同的,也就导致data member的偏移量不同,所以这个操作必须延迟到执行期。

 

目录
相关文章
|
4月前
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
115 2
|
1月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
40 5
|
3月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
156 5
|
4月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
46 3
|
4月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
71 3
|
4月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
73 3
|
4月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
45 3
|
4月前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
4月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
67 1
|
4月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(二):类的默认成员函数详解
【C++篇】C++类与对象深度解析(二):类的默认成员函数详解
37 2