- 博客(269)
- 收藏
- 关注
原创 继承中的访问级别
子类是否可以直接访问父类的私有成员?面向对象中的访问级别不止是 public 和 private可以定义 protected 访问级别关键字 protected 的意义为什么面向对象中需要 protected ? 面向对象的访问级别不只是 public 和 privateprotected 修饰的成员不能被外界所访问protected 使得子类能够访问父类的成员protected 关键字是为了继承而专门设计的没有 protected 就无法完成真正意义上的代码复用
2023-07-26 15:37:53
185
原创 继承的概念和意义
通过继承,可以获得父类的所有功能,并且可以在子类中重写已有功能,或者添加新功能。当前类的对象与成员对象的生命周期相同。将其他类的对象作为当前类的成员使用。子类中可以添加父类没有的方法和属性。子类中可以添加父类没有的方法和属性。继承是面向对象中代码复用的重要手段。子类对象可以直接初始化父类对象。子类拥有父类的所有属性和行为。子类对象可以当作父类对象使用。子类拥有父类的所有属性和行为。子类对象可以当作父类对象使用。子类可以直接赋值给父类对象。子类就是一种特殊的父类。子类就是一个特殊的父类。
2023-07-26 15:08:14
111
原创 类型转换函数
工程中以 TypeToType() 的公有成员函数代替类型转换函数。工程中以 TypeToType() 的公有成员函数代替类型转换函数。类型转换函数与转换构造函数具有同等的地位。普通类型与类类型之间能否进行类型转换?类型转换函数用于将类对象转换为其他类型。类型转换函数用于将类对象转换为其他类型。类类型是否能够类型转换到普通类型?类型转换函数可能与转换构造函数冲突。C++ 类中可以定义类型转换函数。类型转换函数 vs 转换构造函数。转换构造函数的参数类型是其他类型。C++ 类中可以定义类型转换函数。
2023-07-26 11:21:48
155
原创 前置操作符和后置操作符
重载后置 ++ 操作符需要一个 int 类型的占位参数。对于基础类型,前置 ++ 与后置 ++ 的效率几乎相同。前置 ++ 操作符和后置 ++ 操作符都可以被重载。优化后的二进制程序丢失了 C/C++ 的原生语义。不可能从编译后的二进制程序还原 C/C++ 程序。对于类类型,前置 ++ 的效率高于后置 ++编译优化使得最终的可执行程序更加高效。++ 操作符的重载必须符合其原生语义。如何区分前置 ++ 和后置 ++?重载前置 ++ 符不需要额外的参数。优化使得最终的二进制程序更加高效。
2023-07-26 10:48:00
109
原创 逗号操作符的分析
逗号表达式中的前 N - 1 个子表达式可以没有返回值。逗号表达式按照从左向右的顺序计算每个子表达式的值。逗号表达式用于将多个子表达式连接为一个表达式。逗号表达式从左向右顺序计算每个子表达式的值。操作符重载无法完全实现逗号操作符的原生意义。逗号表达式的值为最后一个子表达式的值。在 C++ 中重载逗号操作符是合法的。逗号表达式的值为最后一个子表达式的值。重载函数的参数必须有一个是类类型。重载函数的返回值类型必须是引用。重载后无法从左向右计算表达式。工程开发中不要重载逗号操作符。函数参数的计算次序是不定的。
2023-07-24 19:59:45
194
原创 深入 Linux 进程
pid 为 368521 的子进程,通过 exit(-1) 来退出,退出状态码应该为 -1,而 wait(...) 函数中得到该进程的退出状态码却为 0xFF00,这是因为退出状态码由多个部分组成。在命令行中通过 echo $?命令成功获取到了 a.out 这个子进程的进程退出状态码,那么我们可以在程序中获取到子进程的退出状态码吗?在父进程中,通过 wait(...) 函数来得到子进程的退出状态。我们通过进程退出状态的相关宏,来得知进程是主动退出还是收到信号退出,并打印出对应的退出状态值或退出信号值。
2023-07-17 10:58:59
202
原创 逻辑操作符的陷阱
1、C++ 通过函数调用拓展操作符的功能。通过重载比较操作符代替逻辑操作符重载。通过重载比较操作符替换逻辑操作符重载。操作符重载后无法完全实现原生的语义。直接使用成员函数代替逻辑操作符重载。C++ 从语法上支持逻辑操作符重载。通过专用成员函数替换逻辑操作符重载。实际工程开发中避免重载操作逻辑符。使用全局函数对逻辑操作符进行重载。重载后的逻辑操作符不满足短路法则。3、函数参数的计算次序是不定的。工程开发中不要重载逻辑操作符。重载逻辑操作符有什么意义?逻辑操作符可以重载吗?4、短路法则完全失效。
2023-07-11 20:01:56
251
原创 智能指针分析
指针特征操作符 ( -> 和 * ) 可以被重载。重载指针特征操作符 ( -> 和 * )智能指针的意义在于最大程度的避免内存问题。只能用来指向堆空间中的对象或者变量。重载指针特征符能够使用对象代替指针。智能指针只能用于指向堆空间中的内存。C++ 语言中没有垃圾回收的机制。指针无法控制所指堆空间的生命周期。指针生命周期结束时主动释放堆空间。一片堆空间最多只能由一个指针标识。动态申请堆空间,用完后不归还。只能通过类的成员函数重载。杜绝指针运算和指针比较。重载函数不能使用参数。只能定义一个重载函数。
2023-07-11 19:49:47
128
原创 经典问题解析三
string 类通过一个成员变量保存当前字符串的长度。C++ 开发时尽量避开 C 语言中惯用的编程思想。string 类通过一个数据空间保存字符数据。在需要进行深拷贝的时候,必须重载赋值操作符。赋值操作符与拷贝构造函数有相同的存在意义。重载赋值操作符,必然需要实现深拷贝!赋值操作符和拷贝构造函数有同等重要的意义。当需要进行深拷贝时必须重载赋值操作符。编译器为每个类默认重载了赋值操作符。编译器是否提供默认的赋值操作?什么时候需要重载赋值操作符?默认的赋值操作符仅完成浅拷贝。
2023-07-11 19:38:52
81
原创 函数对象分析
函数调用操作符可以定义不同参数的多个重载函数。函数为全局函数,是唯一的,无法多次独立使用。静态局部变量处于函数内部,外界无法改变。无法具体指定某个具体的数列项作为初始值。函数调用操作符只能通过类的成员函数重载。函数可以获取斐波那契数列每项的值。构造函数指定具体数列项的起始位置。可以定义不同参数的多个重载函数。函数对象用于工程中取代函数指针。该类的对象具备函数调用的行为。多个对象相互独立的求解数列项。函数一旦开始调用就无法重来。函数可以根据需要重复使用。使用具体的类对象取代函数。只能通过类的成员函数重载。
2023-07-07 16:41:50
110
原创 数组操作符的重载
string 类对象还具备 C 方式字符串的灵活性吗?可以按照使用 C 字符串的方式使用 string 对象。string 类最大限度的考虑了 C 字符串的兼容性。string 类最大程度的兼容了 C 字符串的用法。数组访问符的重载能够使得对象模拟数组的行为。数组访问符是 C/C++ 中的内置操作符。数组操作符的原生意义是数组访问和指针运算。只能通过类的成员函数重载数组操作符。类的对象怎么支持数组的下标访问?可以定义不同参数的多个重载函数。重载函数能且只能重载一个函数。只能通过类的成员函数重载。
2023-07-06 21:33:30
159
原创 环境变量编程
环境变量是进程运行过程中可能用到的 "键值对" (NAME = VALUE)进程拥有一个环境表 (environment list),环境表包含了环境变量环境表用于记录系统中相对固定的共享信息 (不特定于具体进程)进程之间的环境表相对独立 (环境表可在父子进程之间传递)
2023-07-03 18:06:02
221
原创 C++ 中的字符串类
C 语言不支持自定义类型,因此无法获得字符串类型。在 C++ 中可以通过类完成字符串类型的定义。标准库中提供了相关的类对字符串和数字进行转换。标准库通过 string 类支持字符串的概念。string 类的应用使得问题的求解变得简单。string 类支持字符串和数字的相互转换。C++ 中的原生类型是否包含字符串类型?C++ 语言直接支持 C 语言的所有概念。C++ 中没有直接支持原生的字符串类型。C++ 语言中没有原生的字符串类型。C 语言不支持真正意义上的字符串。
2023-06-30 19:28:15
328
1
原创 初探 C++ 标准库
重载左移操作符,将变量或常量左移到一个对象中!C++ 标准库并不是 C++ 语言的一部分C++ 标准库是由类库和函数库组成的集合C++ 标准库中定义的类和对象都位于 std 命名空间中C++ 标准库的头文件都不带 .h 后缀C++ 标准库涵盖了 C 库的功能 C++ 标准库是由类库和函数库组成的集合C++ 标准库包含经典算法和数据结构的实现C++ 标准库涵盖了 C 库的功能C++ 标准库位于 std 命名空间中
2023-06-30 17:33:34
189
原创 完整的复数类
C++ 规定赋值操作符 (=) 只能重载为成员函数。复数中的运算操作可以通过操作符重载实现。操作符重载不能改变原操作符的优先级。操作符重载不能改变操作符的原有语义。操作符重载不能改变操作数的个数。复数的概念可以通过自定义类实现。赋值操作符只能通过成员函数实现。操作符重载的本质为函数定义。统一复数与实数的运算方式。统一复数与实数的比较方式。运算:+,-,*,/求模:modulus。
2023-06-30 17:20:12
224
原创 操作符重载的概念
Add 函数可以解决 Complex 对象相加的问题,但是 Complex 是现实世界中确实存在的复数,并且复数在数学中的地位和普通的实数相同。operator 关键字是实现操作符重载的关键。operator 的本质是通过函数重载操作符。操作符重载的本质是通过函数拓展操作符的功能。全局函数和成员函数都可以实现对操作符的重载。编译器优先在成员函数中寻找操作符重载函数。可以将操作符重载函数定义为类的成员函数。C++ 中的重载能够拓展操作符的功能。操作符重载遵循相同的函数重载规则。操作符的重载以函数的方式进行。
2023-06-28 17:02:10
241
原创 类中的函数重载
重载能够拓展系统中已经存在的函数功能!全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?无法直接通过函数名得到重载函数的入口地址。函数重载的本质为相互独立的不同函数。1、函数重载的本质为多个不同的函数。3、函数重载必须发生在同一作用域中。全局函数和成员函数不能构成重载关系。函数重载必然发生在同一个作用域中。2、函数名和参数列表是唯一的标识。重载的意义在于拓展已经存在的功能。通过参数列表对函数用法进行提示。通过函数名对函数功能进行提示。拓展系统中以及存在的函数功能。类的成员函数之间可以进行重载。
2023-06-28 16:36:27
545
原创 类的静态成员函数
静态成员函数是类中特殊的成员函数静态成员函数属于整个类所有可以通过类名直接访问公有静态成员函数可以通过对象名直接访问公有静态成员函数直接通过 static 关键字修饰成员函数。
2023-06-28 14:29:32
207
原创 类的静态成员变量
静态成员变量属于整个类所有静态成员变量的生命期不依赖于任何对象可以通过类名直接访问公有静态成员变量所有对象共享类的静态成员变量可以通过对象名访问公有静态成员变量。
2023-06-28 14:17:46
165
原创 进程参数编程
起始字符可以是 :,+,- 或省略省略:=> 出现选项错误时,程序中通过 : 或者?进行处理并给出默认错误提示: => 错误提示开关,程序中通过 : 或者?进行处理 (无默认错误提示)+ => 提前停止开关,遇见操作数时返回 -1,认为选项处理完毕 (后续都是操作数)- => 不重排开关,遇见操作数时,返回 1,optarg 指向操作数字符串组合 => +: or -:进程参数编程main.cint i = 0;int c = 0;
2023-06-24 20:23:03
272
原创 神秘的临时对象
下面的程序输出什么?为什么?程序意图:在 Test() 中以 0 作为参数调用 Test(int i)将成员变量 mi 的初始值设置为 0运行结果:成员变量 mi 的值为随机值。
2023-06-21 11:18:23
216
原创 对象的构造顺序
C++ 中的类可以定义多个对象,那个对象构造的顺序是怎样的?使用 new 创建对象将自动触发构造函数的调用。堆对象的构造顺序依赖于 new 的使用顺序。当程序执行流到达对象的定义语句时进行构造。当程序执行流到达 new 语句时创建对象。不同的编译器使用不同的规则确定构造顺序。局部对象的构造顺序依赖于程序的执行流。下面程序中的对象构造顺序是什么?下面程序中的对象构造顺序是什么?全局对象的构造顺序是不确定的。对象的构造顺序是不确定的。
2023-06-21 10:44:58
185
原创 初始化列表的使用
编译器无法直接得到 const 成员的初始值,因此无法进入符号表成为真正意义上的常量。类中的 const 成员只能在初始化列表中指定初始值。C++ 中提供了初始化列表对成员变量进行初始化。const 成员变量必须在初始化列表中指定初值。成员的初始化顺序与初始化列表中的位置无关。类中的 const 成员的本质是只读变量。类中的 const 成员会被分配空间的。类中可以使用初始化列表对成员进行初始化。类中是否可以定义 const 成员?成员的初始化顺序与成员的声明顺序相同。类中可以定义 const 成员变量。
2023-06-21 09:57:22
164
原创 类的真正形态
经过不停地改进,结构体 struct 变得越来越不像它在 C 语言中的样子了!在用 struct 定义类时,所有成员的默认访问级别为 public。在用 class 定义类时,所有成员的默认访问级别为 private。struct 在 C 语言中已经有了自己的含义,必须继续兼容。在 C++ 中提供了新的关键字 class 用于类定义。class 和 struct 的用法是完全相同的。
2023-06-19 20:07:02
145
原创 进阶面向对象
对象是具体的事物,拥有所属类中描述的一切属性和行为。类是一种模型,这种模型可以创建出不同的对象实体。一个类可以有很多对象,而一个对象必然属于某个类。类用于抽象的描述一类事物所特有的属性和行为。将日常生活中习惯的思维方式引入程序设计中。将需求中的概念直观的映射到解决方案中。类:指的是一类事务,是一个抽象的概念。面向对象是当今软件开发中的重要方法。类和对象是面向对象理论中的基本概念。对象:指的是属于某个类的具体实体。对象实体是类模型的一个具体实例。类和对象均来源于日常生活中。每个对象不然属于某个类。
2023-06-19 09:57:59
204
原创 初识 Linux 进程
fork() 后,当前进程会创建出和自己一样的子进程,通过 fork() 的返回值可以判断出父进程和子进程,随后,父进程和子进程会同时运行,由于父进程 sleep 100us,所以子进程会先打印,然后父进程再打印。execve 不会创建新的进程,而是将当前进程的进程数据替换为 helloworld.out 的进程数据,并执行,所以执行完 helloworld.out后就结束了,不会打印 end。getpid() 用于获取当前进程的进程号,getppid() 用于获取当前进程的父进程号。
2023-06-18 21:56:41
819
原创 经典问题解析一
第 5 行,用字面量初始化 const 常量 x,x 的值会进入符号表,出现 x 的地方,编译器直接用 1 来替换 (x 被引用或取地址除外,这种情况编译器会为 x 分配内存空间,但 x 不会使用这个内存空间)第 38 行,const 引用的类型和初始化变量的类型不同,编译器会为 c 生成一个新的变量,新的变量的值和 c 一样,为 'c', trc 引用的不是 c,而是新的变量。第 6 行,常量 x 被引用,编译器会为 x 分配内存空间,但 x 不会使用这个内存空间,所以 x 的值还是为 1。
2023-06-18 11:38:30
411
原创 新型的类型转换
强制类型转换在实际工程中是很难完全避免的!如何进行更加安全可靠的转换?用于有继承关系类对象之间的转换和类指针之间的转换。C++ 将强制类型转换分为 4 种不同的类型。新式类型转换以 C++ 关键字的方式出现。强制转换的目标类型必须是指针或引用。用于整数和指针类型间的强制转换。用于有继承关系的类指针间的转换。用于有交叉关系的类指针间的转换。不能用于基本类型指针间的转换。用于指针类型间的强制转换。用于去除变量的只读属性。C 方式的强制类型转换。用于基本类型间的转换。
2023-06-15 16:48:51
359
原创 C++ 中的新成员
使用整个命名空间:using namespace name;使用命名空间中的变量:using name::variable;使用默认命名空间中的变量:::variable。
2023-06-15 16:06:22
455
原创 函数重载分析
函数重载 (Function Overload)用同一个函数名定义不同的函数当函数名和不同的参数搭配时函数的含义不同函数重载至少满足下面的一个条件:参数个数不同参数类型不同参数顺序不同上面的两个函数可以构成重载函数吗?当默认参数遇上函数重载会发生什么?
2023-06-14 20:06:15
367
原创 函数参数的拓展
在 C 语言中,这两种声明方式不等价,void func() 表示 func 函数接受任意多的参数, void func(void) 表示不接受参数;当函数声明时没有出现参数的默认值,而定义的时候出现参数的默认值,编译器会报错。C++ 中支持占位参数,用于兼容 C 语言中的不规范写法。函数调用时使用了默认值,则后续参数必须使用默认中。函数调用时使用了默认值,则后续参数必须使用默认值。当函数调用时没有提供默认参数的值,则使用默认值。占位参数只有参数类型声明,没有参数名声明。参数的默认值必须在函数声明中指定。
2023-06-14 19:46:24
438
原创 深入理解系统调用
用户进程运行在用户模式上,可以通过第三方库和Linux 系统 API (其本质是调用了系统调用)或系统调用进入内核模式,来操作计算机硬件。可以看出 C 标准库的 printf 函数比直接使用系统调用的方式,使用的系统调用次数更多,所花费的时间更长,所以要想我们程序的执行效率高,使用到系统调用的次数越少越好。我们通过 -c 选项来查看使用 C 标准库的 printf 函数和直接使用系统调用的方式执行所有系统调用所花费的时间。系统调用是应用程序 (进程) 是请求模式切换的唯一方式。
2023-06-04 17:00:01
156
原创 Http协议基础
Http 以 TCP 为底座,通过 C/S 模型与服务器进行通信Http 请求必然从客户端发出,服务器端响应请求后断开连接工作模式:请求响应且不保存状态Http 是基于文本的协议 (Http 协议细节具备可读性)
2022-12-26 17:40:58
396
1
原创 客户端设计与初步实现
Response Task 和 Service Task 的业务逻辑如何实现?每个服务设备在回复服务查询消息时,会附带服务地址;因此,记录服务命令与设备地址之间的映射关系。"Touch Lig_Set_On" 怎么知道给哪一个服务设备发送命令?服务设备能够将自身提供的服务信息及用法返回 (字符串描述)服务设备接收命令并匹配服务,并返回服务结果 (字符串描述)客户端业务逻辑如何实现?与服务设备具体交互细节如何设计?客户端根据收到的服务用法向设备发起请求 (字符串描述)客户端主动发起服务查询 (局域网广播)
2022-12-11 21:28:33
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅