钱能 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语句块后。


目录
相关文章
|
4天前
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
22 13
|
9天前
|
编译器 程序员 C++
C++一分钟之-属性(attributed)与属性语法
【6月更文挑战第28天】C++的属性为代码添加元数据,帮助编译器理解意图。C++11引入属性语法`[[attribute]]`,但支持取决于编译器。常见属性如`nodiscard`提示检查返回值,`maybe_unused`防止未使用警告。问题包括兼容性、过度依赖和误用。使用属性时需谨慎,确保团队共识,适时更新以适应C++新特性。通过示例展示了`nodiscard`和`likely/unlikely`的用法,强调正确使用属性能提升代码质量和性能。
28 13
|
13天前
|
编译器 C语言 C++
|
18天前
|
C++
C++ : 程序设计简单实例
C++ : 程序设计简单实例
18 3
|
18天前
|
安全 C++
C++:程序设计实例
C++:程序设计实例
17 2
|
20天前
|
C++
C++的引用定义语法和应用
C++的引用定义语法和应用
|
1月前
|
C++
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
14 2
|
1月前
|
C++
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
17 1
|
10天前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
11天前
|
C++
技术经验分享:C++程序设计的技巧
技术经验分享:C++程序设计的技巧