C++面向对象程序设计:友元函数与对象访问
需积分: 47 33 浏览量
更新于2024-08-18
收藏 5.89MB PPT 举报
"友元函数内访问对象的格式-C++面向对象程序设计(谭浩强版)。PPT"
在C++的面向对象编程中,友元(friend)是一种特殊的关系,它允许非成员函数访问类的私有(private)和保护(protected)成员。这种关系打破了封装的常规规则,为特定情况下提供便利。标题和描述中提到的“友元函数内访问对象的格式”是指友元函数如何在自己的函数体中引用和操作类的成员。
友元函数的声明通常放在类的内部,语法如下:
```cpp
class MyClass {
public:
friend void friendFunction(MyClass& obj);
private:
int myPrivateData;
};
```
在这个例子中,`friendFunction`是`MyClass`的友元,它可以访问`MyClass`的私有成员。在`friendFunction`函数体内,访问`MyClass`的对象`obj`的私有数据成员`myPrivateData`的格式为:
```cpp
void friendFunction(MyClass& obj) {
obj.myPrivateData = 10; // 访问并修改对象的私有数据
}
```
这里,`obj.`表示我们正在访问`obj`对象的成员,`myPrivateData`则是我们要访问的成员名。由于`friendFunction`是友元,因此它可以无需通过公有接口直接访问`myPrivateData`。
C++的面向对象特性还包括类和对象的概念。类是一种数据类型定义,它描述了一组相关的属性(数据成员)和行为(成员函数)。对象是类的实例,当我们创建类的一个实例时,我们就创建了一个对象。例如:
```cpp
class Car {
public:
void drive() { ... }
private:
string brand;
};
Car myCar; // 创建Car类的对象myCar
myCar.drive(); // 调用对象的成员函数
```
在C++中,运算符重载允许我们给已有的运算符赋予新的含义,使得它们能够作用于自定义的数据类型。例如,我们可以重载`+`运算符来实现两个复数相加:
```cpp
class Complex {
public:
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imaginary + other.imaginary);
}
private:
double real;
double imaginary;
};
```
继承和派生是面向对象中的另一个重要概念。继承允许我们创建一个新的类(派生类),这个类继承了父类的属性和行为,并可以添加新的成员或覆盖原有成员。这有助于代码重用和实现多态性。
多态性是面向对象的基石之一,它允许不同类型的对象对同一消息做出不同的响应。在C++中,通过虚函数(virtual function)实现多态性。虚函数允许基类指针或引用调用派生类的版本,即使在编译时无法知道实际的对象类型。
C++中的输入输出流库(I/O Stream)提供了方便的机制进行数据的输入和输出,如`std::cin`用于从标准输入读取数据,`std::cout`用于向标准输出打印数据。
C++不仅扩展了C语言的面向过程编程能力,还引入了丰富的面向对象特性,如类、对象、继承、多态和友元,使得程序设计更加灵活且易于维护。学习C++意味着掌握了一种既支持面向过程也支持面向对象的强大的编程语言。
2024-05-04 上传
2009-12-24 上传
2021-10-06 上传
2012-02-17 上传
点击了解资源详情
点击了解资源详情
2022-11-02 上传
点击了解资源详情
点击了解资源详情
李禾子呀
- 粉丝: 26
- 资源: 2万+
最新资源
- d3-Scatterplot-Graph-fcc:FreeCodeCamp d3散点图
- CG引擎:一个随机的家伙,很开心创建c ++ OpenGl游戏引擎
- Linux shell脚本.rar
- UltrasonicDistanceMeasurementSystem:超声波测距,报警,LCD1602显示数据,温度校正超声波速度
- Excel模板基础体温记录表excel版.zip
- Advanced-Factorization-of-Machine-Systems:GSOC 2017-Apache组织-#使用并行随机梯度下降(python和scala)在Spark上实现分解机器
- operating_system_concept_os
- dosxnt文件-DOS其他资源
- Smart-Device:对于htmlacademy
- static-form-lambda:无服务器模板,创建一个FaaS AWS Lambda来处理表单提交
- Python库 | python-jose-0.6.1.tar.gz
- :scissors: React-Native 组件可在您想要的任何地方切割触摸Kong。 教程叠加的完美解决方案
- ocr
- react-pwa:使用creat js的示例渐进式Web应用程序
- VBiosFinder:从(几乎)任何BIOS更新中提取嵌入式VBIOS
- Python库 | python-hpilo-2.4.tar.gz