Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
beginnersbook-zh
提交
58a5f0e7
B
beginnersbook-zh
项目概览
OpenDocCN
/
beginnersbook-zh
大约 1 年 前同步成功
通知
0
Star
107
Fork
30
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beginnersbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
58a5f0e7
编写于
8月 26, 2019
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2019-08-26 22:17:36
上级
72393486
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
37 addition
and
24 deletion
+37
-24
docs/cpp/27.md
docs/cpp/27.md
+5
-5
docs/cpp/29.md
docs/cpp/29.md
+10
-9
docs/cpp/30.md
docs/cpp/30.md
+12
-7
docs/cpp/31.md
docs/cpp/31.md
+10
-3
未找到文件。
docs/cpp/27.md
浏览文件 @
58a5f0e7
...
...
@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2017/08/cpp-this-pointer/](https://beginnersbook.com/2017/08/cpp-this-pointer/)
**这**
指针保存当前对象的地址,简单来说,你可以说这个
[
指针
](
https://beginnersbook.com/2017/08/cpp-pointers/
)
指向该类的当前对象。让我们举个例子来理解这个概念。
`this`
指针保存当前对象的地址,简单来说,你可以说这个
[
指针
](
https://beginnersbook.com/2017/08/cpp-pointers/
)
指向该类的当前对象。让我们举个例子来理解这个概念。
## C++示例:`this`指针
## C++
示例:`this`指针
在这里你可以看到我们有两个数据成员
`num`
和
`ch`
。在成员函数
`setMyValues()`
中,我们有两个与数据成员名称相同的局部变量。在这种情况下,如果要将局部变量值
分配给数据成员,那么除非使用
`this`
指针,否则您将无法执行此操作,因为除非您使用,否则编译器将不知道您指的是对象的数据成员这个指针
。这是必须使用
`this`
指针的示例之一。
在这里你可以看到我们有两个数据成员
`num`
和
`ch`
。在成员函数
`setMyValues()`
中,我们有两个与数据成员名称相同的局部变量。在这种情况下,如果要将局部变量值
赋值给数据成员,那么除非使用
`this`
指针,否则您将无法执行此操作,因为除非您使用
`this`
,否则编译器将不知道您指的是对象的数据成员
。这是必须使用
`this`
指针的示例之一。
```
cpp
#include <iostream>
...
...
@@ -40,9 +40,9 @@ int main(){
A
```
## 示例 2:使用`this`指针进行函数链
接
调用
## 示例 2:使用`this`指针进行函数链
式
调用
使用
`this`
指针的另一个示例是返回当前对象的引用,以便您可以链
接函数调用,这样您就可以一次调用当前对象的所有函数。在这个程序中需要注意的另一个要点是我在第二个函数中增加了对象
`num`
的值,你可以在输出中看到它实际上增加了我们在第一个函数调用中设置的值。这表明链接是顺序的,对对象的数据成员所做的更改将保留以进一步链接
调用。
使用
`this`
指针的另一个示例是返回当前对象的引用,以便您可以链
式调用函数,这样您就可以一次调用当前对象的所有函数。在这个程序中需要注意的另一个要点是,我在第二个函数中增加了对象
`num`
的值,你可以在输出中看到它实际上增加了我们在第一个函数调用中设置的值。这表明链接是顺序的,对对象的数据成员所做的更改将保留以进一步链式
调用。
```
cpp
#include <iostream>
...
...
docs/cpp/29.md
浏览文件 @
58a5f0e7
# C++中的 OOP 概念
# C++
中的 OOP 概念
> 原文: [https://beginnersbook.com/2017/08/cpp-oops-concepts/](https://beginnersbook.com/2017/08/cpp-oops-concepts/)
面向对象编程是一种通过使用对象将
它们分解为更小问题来解决复杂问题的方法。在面向对象编程(通常称为 OOP)之前,程序是用过程语言编写的,它们只是一长串指令。另一方面,OOP 就是创建可以相互
交互的对象,这使得在 OOP 中开发程序变得更容易,因为我们可以理解它们之间的关系。
面向对象编程是一种通过使用对象将
问题分解为更小问题来解决复杂问题的方法。在面向对象编程(通常称为 OOP)之前,程序是用过程语言编写的,它们只是一长串指令。另一方面,OOP 就是创建可以
交互的对象,这使得在 OOP 中开发程序变得更容易,因为我们可以理解它们之间的关系。
## 面向对象编程(OOP)
在面向对象编程中,我们使用类和对象编写程序,利用 OOP 的特征,如
**抽象**
,
**封装**
,
**继承**
和
**多态**
在面向对象编程中,我们使用类和对象编写程序,利用 OOP 的特征,如
**抽象**
,
**封装**
,
**继承**
和
**多态**
。
### 类和对象
类就像数据成员和函数的蓝图,对象是类的实例。例如,假设我们有一个类
**`Car`**
,它有数据成员(变量),如
速度,重量,价格和功能
,如
`gearChange()`
,
`slowDown()`
,
`brake()`
等。现在让我们说我创建了一个名为
`FordFigo`
的类的对象,它使用这些数据成员和函数,并为它们提供自己的值。同样,我们可以使用蓝图(类)创建任意数量的对象。
类就像数据成员和函数的蓝图,对象是类的实例。例如,假设我们有一个类
**`Car`**
,它有数据成员(变量),如
`speed`
,
`weight`
,
`price`
,和函数
,如
`gearChange()`
,
`slowDown()`
,
`brake()`
等。现在让我们说我创建了一个名为
`FordFigo`
的类的对象,它使用这些数据成员和函数,并为它们提供自己的值。同样,我们可以使用蓝图(类)创建任意数量的对象。
```
cpp
//Class name is Car
...
...
@@ -38,15 +38,15 @@ int main()
### 抽象
[
抽象
](
https://beginnersbook.com/2017/09/abstraction-in-c-with-example/
)
是隐藏用户不相关细节的过程。例如,当您发送短信时,您只需键入消息,选择联系人并单击发送,手机会显示消息已发送,单击发送时背景中实际发生的情况对您是隐藏的,因为它
不相关给你
。
[
抽象
](
https://beginnersbook.com/2017/09/abstraction-in-c-with-example/
)
是隐藏用户不相关细节的过程。例如,当您发送短信时,您只需键入消息,选择联系人并单击发送,手机会显示消息已发送,单击发送时背景中实际发生的情况对您是隐藏的,因为它
对你不相关
。
### 封装
[
封装
](
https://beginnersbook.com/2017/09/cpp-encapsulation/
)
是将数据和
功能组合成像胶囊这样的单个单元的过程。这是为了避免从类外部访问私有数据成员。为了实现封装,我们将类的所有数据成员设为私有并创建公共函数,使用它们我们可以从这些数据成员获取值或将值设置为这些数据成员
。
[
封装
](
https://beginnersbook.com/2017/09/cpp-encapsulation/
)
是将数据和
函数组合成像胶囊这样的单个单元的过程。这是为了避免从类外部访问私有数据成员。为了实现封装,我们将类的所有数据成员设为私有并创建公共函数,使用它们我们可以从这些数据成员获取值或为这些数据成员设置值
。
### 继承
[
继承
](
https://beginnersbook.com/2017/08/cpp-inheritance/
)
是一个特性,子类的对象使用该特
征
获取父类的属性。
[
继承
](
https://beginnersbook.com/2017/08/cpp-inheritance/
)
是一个特性,子类的对象使用该特
性
获取父类的属性。
```
cpp
#include <iostream>
...
...
@@ -69,8 +69,9 @@ int main(void) {
### 多态
[
函数重载
](
https://beginnersbook.com/2017/08/cpp-function-overloading/
)
和运算符重载是多态的例子。多态是一种在不同情况下对象表现不同的特征。
在函数重载中,我们可以有多个具有相同名称但不同数量,类型或参数序列的函数。
[
函数重载
](
https://beginnersbook.com/2017/08/cpp-function-overloading/
)
和运算符重载是多态的例子。多态是一种在不同情况下对象表现不同的特性。
在函数重载中,我们可以有多个函数,具有相同名称但不同数量,类型或顺序的参数。
#### 多态实例
...
...
docs/cpp/30.md
浏览文件 @
58a5f0e7
# C++中的构造函数
# C++
中的构造函数
> 原文: [https://beginnersbook.com/2017/08/cpp-constructors/](https://beginnersbook.com/2017/08/cpp-constructors/)
构造函数是初始化类对象的类的特殊成员函数。构造函数名称与类名称相同,并且没有返回类型。让我们举一个简单的例子来理解构造函数的工作原理。
## 简单示例:如何在 C++中使用构造函数
## 简单示例:如何在 C++
中使用构造函数
阅读以下程序中的注释,以了解该程序的每个部分。
...
...
@@ -51,9 +51,13 @@ ch: A
## 构造函数与成员函数
现在我们知道什么是构造函数,让我们讨论构造函数与类的成员函数的不同之处。
1)构造函数没有返回类型。成员函数具有返回类型。
2)当我们创建类的对象时,会自动调用构造函数。需要使用类的对象显式调用成员函数。
3)当我们不在我们的类中创建任何构造函数时,C++编译器生成一个默认构造函数并将其插入到我们的代码中。这同样适用于成员函数。
3)当我们不在我们的类中创建任何构造函数时,C++ 编译器生成一个默认构造函数并将其插入到我们的代码中。这同样适用于成员函数。
这是编译器生成的默认构造函数的外观:
```
cpp
...
...
@@ -68,13 +72,13 @@ class XYZ
```
## C++中构造函数的类型
## C++
中构造函数的类型
C++中有两种类型的构造函数。 1)默认构造函数 2)参数化构造函数
C++
中有两种类型的构造函数。 1)默认构造函数 2)参数化构造函数
### 1)默认构造函数
默认构造函数没有任何参数(或参数)
默认构造函数没有任何参数(或参数)
。
```
cpp
#include <iostream>
...
...
@@ -110,7 +114,8 @@ Welcome to BeginnersBook
带参数的构造函数称为参数化构造函数。这些类型的构造函数允许我们在创建对象时传递参数。让我们看看他们的样子:
让我们说类名是
`XYZ`
让我们假设类名是
`XYZ`
。
**默认构造函数:**
```
cpp
...
...
docs/cpp/31.md
浏览文件 @
58a5f0e7
# C++中的析构函数
# C++
中的析构函数
> 原文: [https://beginnersbook.com/2017/08/cpp-destructors/](https://beginnersbook.com/2017/08/cpp-destructors/)
析构函数是一个特殊的成员函数,与构造函数相反,与用于初始化对象的
[
构造函数
](
https://beginnersbook.com/2017/08/cpp-constructors/
)
不同,析构函数销毁(或删除)对象。
**析构函数语法**
**析构函数语法
:
**
```
cpp
~
class_name
()
...
...
@@ -18,9 +18,12 @@
## 什么时候析构函数被调用?
在以下情况下,析构函数
**自动调用**
:
1)程序完成执行。
2)当包含
[
局部变量
](
https://beginnersbook.com/2017/08/cpp-variables/
)
的作用域(
`{}`
括号)结束时。
3)当你调用删除操作符时。
3)当你调用
`delete`
运算符时。
## 析构函数示例
...
...
@@ -63,7 +66,11 @@ Destructor is called
## 析构函数规则
1)名称应以波形符号(
`~`
)开头,并且必须与类名匹配。
2)一个类中不能有多个析构函数。
3)与可以有参数的构造函数不同,析构函数不允许任何参数。
4)他们没有任何返回类型,就像构造函数一样。
5)当你没有在类中指定任何析构函数时,编译器会生成一个默认的析构函数并将其插入到代码中。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录