c++基础知识汇总

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。

C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。

C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

c++最大的亮点就是面向对象程序设计理念的运用。包括面向对象开发的四大特性:

  • 封装
  • 抽象
  • 继承
  • 多态

标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  • 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

字符串

C++ 提供了以下两种类型的字符串表示形式:

  • C 风格字符串
  • C++ 引入的 string 类类型

循环

如果条件永远不为假,则循环将变成无限循环

C++ 程序员偏向于使用 for(;;) 结构来表示一个无限循环。

注意:可以按 Ctrl + C 键终止一个无限循环

判断

使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

指针是一个变量,其值为另一个变量的地址

必须在使用指针存储其他变量地址之前,对其进行声明

所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

指针的使用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

引用很容易与指针混淆,它们之间有三个主要的不同:

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。

类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表

关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。

一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。

一个派生类继承了所有的基类方法,但下列情况除外:

  • 基类的构造函数、析构函数和拷贝构造函数。
  • 基类的重载运算符。
  • 基类的友元函数。

继承类型

  • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
  • 保护继承(protected):当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
  • 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

重载运算符和重载函数

C++ 允许在同一作用域中的某个函数运算符指定多个定义,分别称为函数重载和运算符重载。

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

当调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。

函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同

多态

多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

有了多态,就可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。

虚函数

虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。

纯虚函数

大家可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是大家在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。

数据抽象

数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。

数据抽象是一种依赖于接口和实现分离的编程(设计)技术。

在 C++ 中,我们使用访问标签来定义类的抽象接口。一个类可以包含零个或多个访问标签:

  • 使用公共标签定义的成员都可以访问该程序的所有部分。一个类型的数据抽象视图是由它的公共成员来定义的。
  • 使用私有标签定义的成员无法访问到使用类的代码。私有部分对使用类型的代码隐藏了实现细节。

数据抽象有两个重要的优势:

  • 类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
  • 类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。

如果只在类的私有部分定义数据成员,编写该类的作者就可以随意更改数据。如果实现发生改变,则只需要检查类的代码,看看这个改变会导致哪些影响。

如果数据是公有的,则任何直接访问旧表示形式的数据成员的函数都可能受到影响。

数据封装

所有的 C++ 程序都有以下两个基本要素:

  • 程序语句(代码):这是程序中执行动作的部分,它们被称为函数。
  • 程序数据:数据是程序的信息,会受到程序函数的影响。

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

模板

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

STL

C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

初学C++划重点

按《C++程序设计(第2版)(大学计算机基础教育特色教材系列)》归纳重点,供初学者参考。

第1章 程序设计基础

1.1.1计算机系统的组成图

1.1.4程序,软件

1.3.2高级语言的种类

1.4.3算法流程图

1.4.4结构化程序设计

1.4.5面向对象程序设计

1.5.1 C++与C语言

1.5.3简单的C++程序,Hello World

1.5.4 C++程序基本结构,函数,类

第2章 数据与计算

2.1数据类型这个图

2.3变量

2.4运算符与表达式,略看

第3章 流程控制

3.1语句,简单理解

3.2输入输出,cin cout,printf scanf

3.3程序顺序结构,跳转弃

3.4程序选择结构if,switch,嵌套

3.5程序循环结构while2for1,break,continue

枚举法,迭代法

第4章 程序模块化——函数

学习函数有两个主要目标:和。

函数定义,返回,参数调用栈

4.8.2递归调用

4.9作用域和生命期,简

4.13程序组织结构

4.14递归法

第5章 预处理

第6章 批量数据——数组

6.1一维数组

6.2多维数组,矩阵

6.4字符串

6.6数组排序:冒泡、选择、插入、

数组查找:顺序、二分

第7章 引用数据

7.1指针与指针变量,内存地址

7.2指针的使用及计算

7.3指针与数组

7.4指针与字符串

7.5指针与函数

7.6动态内存

7.8引用类型

第8章 组合数据——自定义类型

8.1结构体

第9章 对象

9.1类的定义和声明

9.2对象的定义和使用

9.3构造函数

第10章 继承和派生

面向对象设计的四个特征:抽象、封装、继承、多态

第11章 运算符重载

第12章 异常处理

第13章 命名空间

第14章 标准库,常查询

简单C语言程序的构成和编写格式

求两个数的和。

程序如下:

#include<stdio.h>

main()

{double a,b,sum;

a=1.2; /*将两个数的值赋给a和b*/

b=3.6;

sum=a+b;/*计算两个数的值并存储到变量sum中*/

printf(\”a=%f,b=%f,sum=%f\\n\”,a,b,sum);

}

执行以上程序后,输出结果如下:

a=1.200000,b=3.600000,sum=4.800000

#include<stdio.h>为命令行,<>也可以写成\”\”,stdio.h是系统提供的头文件,包含着输入输出函数的说明信息。

main()是主函数的起始行,也是程序的起始行。main是主函数名。

{}中的部分为函数体。

double a,b,sum;为程序的定义部分。

a=1.2; 到printf(\”a=%f,b=%f,sum=%f\\n\”,

a,b,sum);之间是程序的执行部分。

/**/之间为注释部分,中英文均可,/也可以换成//,但只能单行注释。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。