钱能 c++程序设计教程 语法内容疑难与边角料知识

简介: 钱能 c++程序设计教程 语法内容疑难与边角料知识

第二章 基本数据类型与输入/输出

如果没有专门指定,第1个符号常量的枚举值就是0,其他枚举值依次为1往上加。可以给枚举符指定枚举值,也可以部分指定枚举值。不能用整数值赋给枚举变量。

常量定义时必须初始化,编译前确定值。

setfill控制符可以确定setw所规定的的间隔字符

%-5.3s%中的负号表示左对齐,如果没有负号则默认右对齐。5表示格式宽度,3表示截取字符串中第3个字符。

第三章 表达式和语句

结合性,指表达式中出现同等优先级的操作符时,该先做哪个操作的规定。

! ~ + - ++ -- & * sizeof new delete从右向左结合

?: = *= /= += -= |= <<= >>=从右向左结合

增量和减量操作符要求操作数是左值,前增量结果是左值,后增量结果不是左值。

在一个条件运算符表达式中,如果后面两个表达式值类型相同都是左值,则该条件运算符表达式的值为左值表达式。如果逗号表达式最后一个表达式为左值,则该逗号表达式为左值。

第五章 函数

默认值可以是全局变量、全局常量,甚至是一个函数

第六章 程序结构

extern int n表示该变量n不在本文件中分配空间,在程序其他文件中分配空间。默认的函数声明总是extern的。

全局静态变量使得该变量称为由定义该变量的源文件独享。

具有文件作用域的变量具有静态生命期。全局变量、静态全局变量、静态局部变量具有静态生命周期。

动态生命期的变量驻扎在内存的堆中,用free或delete释放变量或程序结束时,生命期结束。

条件编译协调多个头文件。

第八章 指针

指针具有一定类型,是值为地址的变量,该地址是内存中另一个该类型变量的存储位置。指针是具有某个类型的地址

常量指针定义const int *pi=&a告诉编译器,*pi是常量,不能将*pi作为左值进行操作

指针常量定义int *const pc=&b告诉编译器,pc是常量,不能作为左值进行操作,但允许修改间接访问值,*pc可以修改。

常量指针常量定义const int *const cpc=&b,告诉编译器,cpc*cpc都是常量,都不能作为左值进行操作。

第九章 引用

引用在声明时必须被初始化。引用运算符只在声明时被使用,放在类型名后面。

无引用的引用,无指针的指针。

c++不区分变量的const引用和const变量的引用

第十章 结构体

数组是单纯空间意义上同类数据实体的集合,结构大小固定可以被赋值。

用结构参数引用传递,无需给另一个结构变量赋值,无需在返回时复制结构值给临时结构变量。

类名允许与其他变量名或函数名相同。

十二章 构造函数

构造函数没有返回类型,函数体中不允许返回值。

在类中声明的对象成员的次序依次调用其构造函数。

只要一个类定义了一个构造函数(不一定是无参构造函数),c++就不再提供默认构造函数。如果创建全局对象或静态对象,则对象的位模式全0,否则对象值随机。

冒号语法使得常量数据成员和引用数据成员的初始化成为可能。

所有全局对象都在main前构造。

全局对象构造时无特殊顺序,按照出现的顺序依次构造。

十三章 面向对象程序设计

全局变量、静态数据、常量、字面量存在全局数据区。类成员函数和非成员函数代码在代码区。局部变量、函数参数、返回数据、返回地址存放在栈区。余下空间作为堆区。

从堆上分配对象数组,只能调用默认构造函数,不能调用其他构造函数。

如果类需要析构函数来析构资源,则需要深拷贝构造函数。

把构造函数用于类型转换,只会尝试含有一个参数的构造函数。如果有二义性,则放弃尝试。

十五章 静态成员与友元

静态数据成员确实是在程序一开始运行时必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数分配空间和初始化。

一个静态成员函数不与任何对象联系,不能对非静态成员进行默认访问。静态成员函数没有this指针,非静态成员函数有一个指向当前对象指针this。

友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。

一个类的成员函数可以使另一个类的友元。整个类是另一个类的友元,该友元称为友类。友类的每个成员函数都可以访问另一个类中的保护或私有数据成员。

十六章 继承

可以通过自身成员函数访问父类private成员

基类私有成员在派生类下是隔离的,必须通过基类的保护成员或公有成员函数访问。对于私有继承,派生类的成员函数可以访问基类保护和公有成员,却不能直接访问基类私有成员。通过保护成员或公有的基类成员函数访问基类私有成员。

调整访问控制属性的前提是派生类中该成员必须可见

多继承程序必须在重名前说明基类

虚拟继承的虚拟和虚拟函数的虚拟没有任何关系

1.构造函数按以下顺序调用:1.任何虚拟基类的构造函数按它们被继承的顺序构造。2.任何非虚拟基类的构造函数按照它们被继承的顺序构造。3.任何成员对象的构造函数按照它们声明的顺序调用。4.类自己的构造函数

十七章 多态

在运行时根据其类型确认调用哪个函数的能力称为多态或迟后联编。

若语言不支持多态,则不能被称为面向对象的语言。

为了指名某个成员函数具有多态性,用virtual标志其为虚函数。该虚函数性质自动向下带给其子类。

虚函数在基类与子类仅仅是名字相同,参数类型不同或返回类型不同,即使加上了virtual也不迟后联编。

子类的虚函数返回子类指针或引用,进行迟后联编。

只有类的成员函数才能说明为虚函数。静态成员函数不能是虚函数。内联函数不能是虚函数。构造函数不能是虚函数。

从相似的类中将共有特征提取出来的过程称为分解。

c++允许程序员声明一个不能有实例对象的类,唯一用途是被继承。这种类被称为抽象类。一个抽象类至少具有一个纯虚函数。在纯虚函数的声明后“=0”表示程序员将不定义该函数。一个抽象类不能有实例对象。

不能创建一个抽象类,但可以声明抽象类的指针或引用。

十八章 运算符重载

不能重载点操作符.,域作用操作符::,访问操作符.,指针操作符->,条件操作符?:,=,(),[],->必须为成员形式

拷贝构造函数执行时,对象不存在,起初始化作用。

赋值运算符分两部分,第一部分与析构函数类似,在其中取消对象已经占用的资源。第二部分与拷贝构造函数类似,分配新的资源。

十九章 I/O流

getline()读取输入行。

二十章 模板

类模板是模板的定义,模板类是实实在在的类定义,由类模板生成。

编译器首先匹配重载函数,然后再寻求模板的匹配。

二十一章 异常

try块后紧跟多个catch()语句。catch()括号中的声明只能容纳一个形参,当类型与抛掷异常类型匹配时,catch()块捕获了一个异常,进行异常处理。

任意数量的catch()紧随出现在try语句块后。


目录
相关文章
|
1月前
|
算法 数据挖掘 Shell
「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
还在为生信软件的安装配置而烦恼?micromamba(micromamba是mamba包管理器的小型版本,采用C++实现,具有mamba的核心功能,且体积更小,可以脱离conda独立运行,更易于部署)帮你解决!
60 1
|
1月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
38 1
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
221 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
Java C# C++
C++ 11新特性之语法甜点1
C++ 11新特性之语法甜点1
33 4
|
2月前
|
编译器 C++ 容器
C++ 11新特性之语法甜点2
C++ 11新特性之语法甜点2
30 1
|
2月前
|
存储 算法 编译器
C++ 11新特性之语法甜点4
C++ 11新特性之语法甜点4
28 0
|
2月前
|
安全 C++ 容器
C++ 11新特性之语法甜点3
C++ 11新特性之语法甜点3
35 0
|
3月前
|
编译器 C++ 容器
C++语言的基本语法
想掌握一门编程语言,第一步就是需要熟悉基本的环境,然后就是最重要的语法知识。 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 类 - 类可以定义为描述对象行为/状态的模板/蓝图。 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 完整关键字
|
4月前
|
Java 编译器 程序员
C++中的语法知识虚继承和虚基类
**C++中的多继承可能导致命名冲突和数据冗余,尤其在菱形继承中。为解决这一问题,C++引入了虚继承(virtual inheritance),确保派生类只保留虚基类的一份实例,消除二义性。虚继承通过`virtual`关键字指定,允许明确访问特定路径上的成员,如`B::m_a`或`C::m_a`。这样,即使基类在继承链中多次出现,也只有一份成员副本,简化了内存布局并避免冲突。虚继承应在需要时提前在继承声明中指定,影响到从虚基类派生的所有后代类。**
|
4月前
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
140 13