C++程序设计:指向类成员的指针解析
需积分: 4 93 浏览量
更新于2024-08-24
收藏 8.66MB PPT 举报
"指向类成员的指针-C++程序设计 谭浩强完整版"
C++是一种强大的面向对象编程语言,它在C语言的基础上增加了许多面向对象的特性。本资源主要探讨了C++中指向类成员的指针,这是一种允许程序员直接访问类中的数据成员或调用成员函数的特殊指针类型。
1. 指向类数据成员的指针:
在C++中,可以定义一个指针变量,该变量可以直接指向类的某个数据成员。定义这种指针的语法如下:
```cpp
<类型> 类名::*指针名;
```
其中,`类型`是类中对应数据成员的类型,`类名`是包含该数据成员的类的名称,`指针名`是你要定义的指针变量的名字。例如,如果有一个名为`Student`的类,其中有一个`int`类型的成员变量`score`,你可以这样定义一个指针:
```cpp
int Student::*scorePtr;
```
这个`scorePtr`指针就可以用来指向`Student`类的任何实例中的`score`成员。
2. 使用指向类成员的指针:
要使用指向类数据成员的指针,你需要将其与类的实例组合,以访问特定实例的成员。假设我们有`Student`类的一个实例`s`,可以这样使用`scorePtr`:
```cpp
Student s;
s.score = 90; // 设置score
int actualScore = s.*scorePtr; // 通过指针获取score值
```
通过这种方式,你可以动态地访问不同对象的成员,而无需知道具体是哪个对象。
3. 指向类成员函数的指针(函数指针):
类似于数据成员,C++也支持指向成员函数的指针。这在处理回调函数、事件处理或函数对象时特别有用。定义一个指向成员函数的指针的语法稍微复杂一些,因为它需要考虑到对象的隐含第一个参数(即`this`指针)。例如,如果`Student`类有一个返回`int`的成员函数`getScore`,可以这样定义函数指针:
```cpp
int (Student::*getScorePtr)();
```
然后,你可以像下面这样使用这个函数指针:
```cpp
int result = (s.*getScorePtr)();
```
注意,调用成员函数指针时,需要与对象一起使用。
4. C++的发展历程:
C++是在C语言的基础上发展起来的,由Bjarne Stroustrup于1983年提出。C++增加了类、模板、异常处理、命名空间等面向对象特性,使得它更适合开发大型复杂系统。C++语言的设计目标是结合C语言的高效性和高级语言的抽象能力,提供良好的可移植性和程序性能。
5. C语言的特点:
- 结构化:C语言采用模块化和结构化编程,使得代码易于理解和维护。
- 高级与低级混合:C语言提供了丰富的运算符和直接的内存访问,兼顾高级语言的便利性和汇编语言的效率。
- 可移植性:C语言编写的程序可以在多种平台之间轻松移植。
- 语法灵活:C语言的语法相对宽松,这既有利于经验丰富的程序员写出高效代码,也可能使初学者在编程时遇到挑战。
6. C++与C语言的关系:
C++是对C语言的扩展,它保留了C语言的基本语法,并添加了面向对象的特性。C++程序可以使用C语言的大部分语法,但C++提供了更现代的编程范式,如模板、STL(标准模板库)以及更高级的内存管理机制。
理解并掌握指向类成员的指针是深入学习C++的重要步骤,这有助于编写更高效、更灵活的代码。同时,了解C++的起源和发展,可以帮助我们更好地理解语言的设计哲学和应用场景。
2018-04-06 上传
2012-04-13 上传
2018-01-25 上传
2024-11-06 上传
2024-11-05 上传
2023-09-06 上传
2023-11-24 上传
2023-09-12 上传
2024-01-18 上传
辰可爱啊
- 粉丝: 18
- 资源: 2万+
最新资源
- Chopsticks1
- OpenCV-Python-C-Module-for-Image-Processing:如何在C ++(Mat)中从Python(NumPy数组)处理OpenCV图像
- 判决matlab代码-select-vignette-subsets:选择具有代表性的小插曲子集来调查道德判断的多个方面
- Python库 | datapane-0.10.5-py3-none-any.whl
- beat-api:用Typescript编写的UtilityFun API
- ocarina金手指编辑器.rar
- FinalCS201-1959045-MinhXuan
- pyg_lib-0.3.0+pt20cpu-cp38-cp38-linux_x86_64whl.zip
- 096. 2019年中国电竞用户调研报告.rar
- python-online-compiler:一个用于在线执行代码的Web应用程序
- 密码
- pitrex_chess:PiTrex的国际象棋游戏
- kubernetes-the-virtualbox-way:本教程将引导您逐步在VirtualBox机器上设置Kubernetes,因为并非所有人都希望使用公共云
- Scripts
- matlab代码对齐-kinectv1.0-remap:kinectv1.0-重映射
- nested-object-finder:查找嵌套对象的值