《C++面向对象程序设计》?千处细节、万字总结(建议收藏)

《C++面向对象程序设计》处细节、万字总结

文章目录

    • 《C++面向对象程序设计》处细节、万字总结
      • 一、面向对象程序设计
      • 二、C++基础
        • 2.1 C++的产生和特点
        • 2.2 一个简单的C++示例程序
        • 2.3 C++在非面向对象方面对C语言的扩充
          • 输入和输出
          • cin
          • const修饰符
          • void型指针
          • 内联函数
          • 带有默认参数值的函数
          • 函数重载
          • 作用域标识符”::”
          • 强制类型转换
          • new和delete运算符
          • 引用
      • 三、类和对象(一)
        • 3.1 类的构成
        • 3.2 成员函数的定义
        • 3.3 对象的定义和使用
        • 3.4 构造函数与析构函数
          • 构造函数
          • 成员初始化列表
          • 带默认参数的构造函数
          • 析构函数
          • 默认的构造函数和析构函数
          • 构造函数的重载
          • 拷贝构造函数
          • 浅拷贝和深拷贝
      • 四、类和对象(二)
        • 4.1 自引用指针this
        • 4.2 对象数组与对象指针
        • 4.3 string类
        • 4.4 向函数传递对象
        • 4.5 静态成员
        • 4.6 友元
          • 友元函数
          • 友元类
        • 4.7 类的组合
        • 4.8 共享数据的保护
      • 五、继承与派生
        • 5.1 继承与派生的概念
          • 基类成员在派生类中的访问属性
          • 派生类对基类成员的访问规则
        • 5.2 派生类的构造函数和析构函数
        • 5.3 调整基类成员在派生类中的访问属性的其他方法
        • 5.4 多继承
        • 5.5 虚基类
        • 5.6 赋值兼容规则
      • 六、多态性与虚函数
        • 6.1 多态性概述
        • 6.2 虚函数
        • 6.3 虚析构函数
        • 6.4 纯虚函数
        • 6.5 抽象类
        • 6.6 示例:利用多态计算面积
      • 七、运算符重载
        • 7.1 运算符重载概述
      • 八、函数模板与类模板
        • 8.1 模板的概念
        • 8.2 函数模板
        • 8.3 类模板
      • 九、C++的输入和输出
        • 9.1 C++为何建立自己的输入/输出系统
        • 9.2 C++的流库及其基本结构
          • 用于输入/输出的头文件
          • 用于输入/输出的流类
        • 9.3 预定义的流对象
        • 9.4 输入/输出流的成员函数
        • 9.5 预定义类型输入/输出的格式控制
        • 9.6 文件的输入/输出
        • 9.7 文件的打开与关闭
        • 9.9 二进制文件的读写
          • 用get()函数和put()函数读/写二进制文件
          • 用read()函数和write()函数读写二进制文件
          • 检测文件结束
      • 十、异常处理和命名空间
        • 10.1 异常处理
        • 10.2 命名空间和头文件命名规则
      • 十一、STL标准模板库
        • 11.1 Vector
        • 11.2 list容器
        • 11.3 stack
        • 11.4 queue
        • 11.5 优先队列priority_queue
        • 11.6 双端队列deque
        • 11.7 set
        • 11.8 map

一、面向对象程序设计

面向对象程序设计(,)是一种新的程序设计范型。程序设计范型是指设计程序的规范、模型和风格,它是一类程序设计语言的基础。

面向过程程序设计范型是使用较广泛的面向过程性语言,其主要特征是:程序由过程定义过程调用组成(简单地说,过程就是程序执行某项操作的一段代码,函数就是最常用的过程)。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。

《C++面向对象程序设计》?千处细节、万字总结(建议收藏)

对象:描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可认为是数据+操作。

:类是具有相同的数据和相同的操作的一组对象的集合。

消息传递:对象之间的交互。

**方法:**对象实现的行为称为方法。

面向对象程序设计的基本特征:抽象、封装、继承、多态。


二、C++基础

~

2.1 C++的产生和特点

C++是美国贝尔实验室的Bjarne Stroustrup博士在C语言的基础上,弥补了C语言存在的一些缺陷,增加了面向对象的特征,于1980年开发出来的一种面向过程性与面向对象性相结合的程序设计语言。最初他把这种新的语言称为“含类的C”,到1983年才取名为C++。

相比C语言,C++的主要特点是增加了面向对象机制。

~

2.2 一个简单的C++示例程序

详细创建步骤可参考博客【Visual Studio】 创建C/C++项目

~

2.3 C++在非面向对象方面对C语言的扩充

输入和输出
cin
  • 在默认情况下,运算符“”将跳过空白符,然后读入后面与变量类型相对应的值。因此,给一组变量输入值时可用空格符、回车符、制表符将输入的数据间隔开。
  • 当输入字符串(即类型为string的变量)时,提取运算符“”的作用是跳过空白字符,读入后面的非空白字符,直到遇到另一个空白字符为止,并在串尾放一个字符串结束标志‘’。

~

C++允许在代码块中的任何地方声明局部变量。

const修饰符

在C语言中,习惯使用来定义常量,例如,C++提供了一种更灵活、更安全的方式来定义常量,即使用修饰符来定义常量。例如

const可以与指针一起使用,它们的组合情况复杂,可归纳为3种:指向常量的指针、常指针和指向常量的常指针。

  • 指向常量的指针:一个指向常量的指针变量。

  • 常指针:将指针变量所指的地址声明为常量

  • 指向常量的常指针:这个指针所指的地址不能改变,它所指向的地址中的内容也不能改变。

说明:

  1. 如果用const定义整型常量,关键字可以省略。即 与 等价;

  2. 常量一旦被建立,在程序的任何地方都不能再更改。

  3. 与#define不同,const定义的常量可以有自己的数据类型。

  4. 函数参数也可以用const说明,用于保证实参在该函数内不被改动。

void型指针

void通常表示无值,但将void作为指针的类型时,它却表示不确定的类型。这种void型指针是一种通用型指针,也就是说任何类型的指针值都可以赋给void类型的指针变量

需要指出的是,这里说void型指针是通用指针,是指它可以接受任何类型的指针的赋值,但对已获值的void型指针,对它进行再处理,如输出或者传递指针值时,则必须再进行显式类型转换,否则会出错。

内联函数

在函数名前冠以关键字,该函数就被声明为内联函数。每当程序中出现对该函数的调用时,C++编译器使用函数体中的代码插入到调用该函数的语句之处,同时使用实参代替形参,以便在程序运行时不再进行函数调用。引入内联函数主要是为了消除调用函数时的系统开销,以提高运行速度。

说明

  • 内联函数在第一次被调用之前必须进行完整的定义,否则编译器将无法知道应该插入什么代码
  • 在内联函数体内一般不能含有复杂的控制语句,如for语句和switch语句等
  • 使用内联函数是一种空间换时间的措施,若内联函数较长,较复杂且调用较为频繁时不建议使用

使用内联函数替代宏定义,能消除宏定义的不安全性

带有默认参数值的函数

当进行函数调用时,编译器按从左到右的顺序将实参与形参结合,若未指定足够的实参,则编译器按顺序用函数原型中的默认值来补足所缺少的实参。

  • 在函数原型中,所有取默认值的参数都必须出现在不取默认值的参数的右边

  • 在函数调用时,若某个参数省略,则其后的参数皆应省略而采取默认值。不允许某个参数省略后,再给其后的参数指定参数值。

函数重载

在C++中,用户可以重载函数。这意味着,在同一作用域内,只要函数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或者两个以上的函数可以使用相同的函数名。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月18日
下一篇 2022年5月18日

相关推荐