C++Primer记录自己不清楚的内容

本文详细介绍了C++编程的基础知识,包括输入输出流、字符串处理、枚举常量、作用域解析、命名空间、引用、类的定义与继承、内联方法、静态成员、友元类、常量方法、运算符重载等内容。同时,阐述了对话框的运行特性、头文件的使用、结构体与共用体的区别、字节问题、换行符与制表符等细节。文章还强调了C++中变量初始化的重要性以及构造函数的应用,帮助读者全面掌握C++编程的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1<iostream.h> input  output stream  即是输入输出流头文件

2<cstring.h> 是字符串处理函数的头文件

3、记熟转义序列表.

4、枚举常量按常量处理,作为常量本身是有值的,按照定义时的顺序使值不断递增。即第一个值是0则第二个是1;第一个是4,第二个就是5

5Stdafx  Standard Application Framework Extensions(标准应用程序框架的扩展)

6C++语言中增加引用,主要是用它作为函数的参数,使无返回值的函数具有传递数据的功能。

7、在学习C++第四章 面向对象程序设计时的收获:

1)学习怎么定义类,怎么去声明类,这里一定要注意结尾是“}+;”。

   (2) 声明对象,对象即是类的实例化 直接“类名  对象名”即可。

(3)学习类成员的保护,类成员的保护意思是:在类外部不能访问私有成员和保护成员,而只能访问公有成员。私有成员顾名思义就是它只能在类本身的方法内访问,类的对象则不能够访问私有成员,并且私有成员不能被派生类继承。保护成员虽然不能被对象访问,但可以被派生类继承。

(4)学习构造函数的定义及调用,我的理解就是声明好类,然后“类::函数名”构造函数。还有析构函数也是如此,不过又加个“~”。调用的话 直接“类名  对象名”。

(5)学习类的继承,类的继承有单继承,多继承,虚继承。

单继承就是声明一个类以后,再在声明一个类继承前者。多继承是多个类继承同一个类,但是调用的时候两个类不能调用基类中的方法。虚继承是用到关键字“virtual”可以实现调用基类中的方法。

(6)又学习为类定义内联方法 只需要在方法返回值前添加inline关键字。也可以将方法的定义放在类的声明中,则该方法自动成为内联方法。

(7)接着又学习定义静态成员数据和静态方法。静态数据成员不仅可以由对象访问,也可以由类访问。静态成员数据被对象所共有,无论定义多少了对象,内存中的静态成员只有一个。因此,一个对象修改了静态成员数据,另一个对象在访问静态成员数据时也会发生变化。。静态数据成员必须被初始化。

(8)学习定义友元类和友元函数。用“friend” 将某个类作为另一个类的友元类。则这两个类可以相互访问彼此的私有数据或方法。

(9)Const方法 利用关键字“const”对成员进行保护。

(10)对运算符重载的+运算符或++运算符的学习

8、模拟对话框在运行时,必须关掉它后才能运行其他的窗口。而非模拟对话框显示后,程序其他窗口仍能正常进行,可以响应用户输入,还可以相互切换。

9、#include <>#include “”的区别是:<>一般指是位于标准位置的标准include文件,而“”指的是当前目录。“”告诉预处理器在当前目录查找头文件,如果没有找到,再通过为编译器指定的其他目录查找(如何指定附加的查找目录,请查看你的编译器文档),用这种形式,头文件必须有.h后缀。

10、双冒号称为作用域解析操作符,用来告诉编译器在指定的命名空间查找函数名。

11、Using语句通常会违背使用命名空间的目的,因为他会把命名空间里所有的名字混合在一起。

12、空行和大括号所在行是紧密相关代码行的标志。

13、结构体,共用体,枚举三种。结构体引用时用“.”。共用体是一个数据变量。并且只有一个,其类型由其最后一个赋值的数据成员的数据类型决定。枚举只是一个变量,结构体大括号里是结构体的成员变量,引用结构体时可以同时引用结构体全部的变量。而枚举大括号里表示的是几种可能的值,意思是说在某一时刻只能引用一个值。

14、字节问题:一个字节8位 1byte=8bit;一个字符(char1个字节,一个  汉字(字)两个字节,一个整型(int)四个字节(机器字长位数32位),double8个字节,float也是四个字节,double float 8个字节。

15、换行符 :\n ;水平制表符:\t;纵向制表符:\v;退格符:\b;回车符:\r;进制符:\f;报警符(响铃):\a;反斜线:\\;疑问号:\?;

16、默认的浮点字面值常量为double类型

171. 左值(发音为 ell-value):左值可以出现在赋值语句的左边或右边。就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式。

     2. 右值(发音为 are-value):右值只能出现在赋值的右边,不能出现在赋值语句的左边。它就是变量的值。

变量名出现在赋值运算符的左边就是左值,而出现在赋值运算符右边的变量名或字面常量就是一个右值。

18、初始化赋初值和赋值是两个不同的操作

19、永远不要依赖于未定义行为

20、<string><string.h>是两个没有关系的标准库,但是<cstring>是<string.h>的升级,就如同于<iostream>等是<iostream.h>的升级一样

21、未初始化变量会引起编程问题的,尽量少用。

22、未初始化变量有时在程序运行中并且产生错误,有时则会使程序崩溃。原因是:虽然变量是未初始化变量,但是它一样有一个值。编译器把该变量放到内存中的某个位置,而把这个位置的无论哪种位模式都当成是变量初始的状态,当被解释成整型值的时候,任何模式都是合法的值---虽然这个值不可能是 程序员想要的。因为这个值合法,所以使用它也不可能会导致程序崩溃。可能的结果是导致程序错误执行或/和错误计算。

23、构造函数这个概念,每次我想用“顾名思义”的方式来理解时,总是理解不了。在此,强调记忆它的定义:就是定义如何进行初始化的成员函数称为构造函数。

24、C++区分了声明和定义,变量的定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义。声明则用于向程序表明变量的类型和名字。程序中变量可以声明多次,但是只能定义一次。只有当声明也是定义时,声明才可以有初始化式,才可以分配存储空间。在一个大括号里面或者外面,被初始化后的变量,后面的对这个变量的定义都是错误的,同样,后面对它的初始化也是错误的。

25、用来区分名字的不同意义的上下文被称为名字的作用域。而怎么理解作用域?作用域就是程序段中的一段区域。可分为多种:即全局作用域、局部作用域、语句作用域、类作用域和命名空间作用域。怎么理解?比如定义一个函数,函数名具有全局作用域,函数体中的变量具有局部作用域。另外,名字还可以在内部作用域中重新定义。

26、不能定义引用类型的引用,但可以定义任何其他类型的引用。引用必须用与该引用类型的对象初始化。

27、引用符号“&”。

28、const引用只能绑定到与该引用同类型的对象,但const引用可以绑定不同类型的对象,但是需要是相关类型,因为const引用是只读的。

29、不能给常量引用赋左值

30、对于枚举的认识:关键字:enum  类型名:open_mode(随意定义)  {a,b,c};  如果a=1则后面的每个枚举成员赋的值比前面的大1。如果a未初始化,则默认初始化为0

31、什么是常量表达式:编译器在编译时就能够计算出结果的整型表达式。整型字面值常量是常量表达式。

32、在学习类的定义时:类定义中有定义数据成员,要记住普通的定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型,就相当于声明一样。类不是在定义里定义数据成员时初始化数据成员的,而是通过称为构造函数的特殊成员函数控制初始化。

33、操作称为成员函数

34、头文件是声明,但不是定义。因此 extern很重要。声明一定要用extern。在这里温习前面的内容:要记住:非const变量在文件中声明时默认为extern。要使const变量能够在其他文件中访问,那么需要指定为extern.

35、由于头文件包含在多个源文件中,所以不应该含有变量或函数的定义。也就是说对于头文件不应该含有定义这一规则,但是有三个是例外的:即:头文件可以定义类、值在编译时就已知道的const对象和inline函数.

36、标准库类型有stringvectorbitset.标准库类型更高级更抽象。

37、::操作符是作用域操作符。例如std::cin的意思是说所需要的名字在命名空间std中定义的。

38、字符串字面值和标准库中的string类型不同,编程时注意区分

39、默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数,它由不带参数的构造函数,或者为所有形参提供默认实参的构造函数定义,如果定义某个类的变量时没有提供初始化式,就会使用默认构造函数。

40、认识并接受string::size_type类型。这个类型比int型的存储空间大一倍

41、String类型虽然能够进行和字符串字面值“+”操作,但是进行操作时必须至少有一个string类型,两个字符串字面值是不能直接“+”的,并且string类型在第一个+的最前面。

42、换行符和endl是不同的。换行符就是换行的,endl则是输出换行并刷新与cout相关联的缓冲区。

43、可打印的字符是指那些可以表示的字符,空白字符则是空格、制表符、垂直制表符、回车符、换行符和进制符中的任意一种;标点符号则是除了数字、字母或(可打印的)空白字符(如空格)以外的其他可打印字符。

44、学习了,把大写字母转化成小写字母tolower().和小写字母转化成大写字母uplower();

45、标准库头文件命名形式为nameC++版本则命名为cname.且少了后缀.h而在name前加了c.因此看到头文件前面带c(即cname)的基本上是C++要用的头文件。通常,C++ 程序中应采用 cname 这种头文件的版本,而不采用 name.h 版本,这样,标准库中的名字在命名空间 std 中保持一致。

使用 .h 版本会给程序员带来负担,因为他们必须记得哪些标准库名字

是从 继承来的,而哪些是 C++ 所特有的。

46、string类型中可以直接比较字符串大小,这与数组中相比不用一个一个字符比较了,有我们查英语字典是根据的大小比较功能。直接操作即可。如s1>s2那就是字符串s1s2大。

47、Vector是一个类模板,不是一种数据类型

48、Vector是一种类型的对象的集合,每个对象都对应一个整数索引值,因此说vector中不是仅有一个数据的,可以有很多。

49、Vector的对象输出时需要对应索引值。Vetor <int> a(10,1); cout<<a[1];就像这个例子一样吧。

50、Vector下表操作不添加元素,要向添加元素需用v.push_back().

51、所谓的“缓冲区溢出”错误就是对不存在的元素进行下表操作的结果。

52、注意const_iterator iterator的区别 ,不允许用const_iterator 进行赋值。

53、不要把const_iteratorconstiterator变量混淆

54、声明一个const迭代器,必须对该对象进行初始化,并且一旦初始化后就不能改变。

55、学习标准库bitset

56、指针是指向某种类型对象的复合数据类型

57、整天看到*,不知道他的真正含义,原来就是解引用符,意思是对其得到操作数所指变量的引用。在声明语句中,它可以用在指定类型的对象列表的任何位置。

58、&用于对象时,返回的是该对象的存储地址,只能用于左值,因为变量只有用于左值时才能取其地址。

59、以前学习是总是把指针看的很重要,但是学C++Primer时,发现作者建议尽量少用指针和数组,,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代风格字符串。

60、指针变量可以指向vector

61、避免使用未初始化的指针,如果指针未初始化,会将指针中存放的不确定值作为地址。

62、Int变量赋值给指针是非法的。但可以直接使用0或值为0const变量。

63、NULL是预处理器变量,他不是在std命名空间中定义的。

64、Void*,表明指针与一地址值相关,但不清楚存储在此地址上的对象的类型。

65、无法确定某个指针是否指向一个确定的对象。因为C++中,无法检测指针是否未被初始化,也无法区分一个地址是有有效地址,还是由指针所分配的存储空间中存放的不确定值的二进制位形成的。

66、Int *p1=*p2;意思是p2指向一个指针p1

67、起始位置和超出末端位置这两个概念,超出末端位置就是一个哨兵。 

68、指针是数组的迭代器。

69、我们可以用指针来修改指针多指对象的值,但是如果指针指向const对象,则不允许用指针来改变其所指const的值。

70、了解C风格字符串的概念。C风格字符串是一NULL结束的字符数组。

71、C++提供普通的关系操作符实现标准库类型string的对象的比较,这些操作符也可用于比较指向C风格字符串的指针,但效果却不很相同:实际上,此时比较的是指针上存放的地址值,而并非他们所指向的字符串。

72、在学习C++primer过程中,作者提醒。对大部分应用而言,使用标准库类型string,除了增强安全性外,效率也提高了,因此应该尽量避免使用C风格字符串。

73、学会创建动态数组。

74、C语言中使用一对标准库函数mallocfree在自由存储区中分配存储空间,而C++语言则使用new delete表达式实现相同功能。

75、数组变量通过指定类型、数组名和维数来定义。而动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new表达式返回指向新分配数组的第一个元素的指针。

76、我觉得我一看到const的用法就头疼;这必然是一个弱项。

77、标准库函数strlen返回的是字符串的长度,并不包含字符串结束符。而实际上字符串存储空间是包含结束符的,因此空间是 strlen()+1;

78、c_str()函数返回C风格字符串。

79、开始学习操作符。C++中操作符分为三类:一元操作符、二元操作符、三元操作符。实际上他们就是指使用一个操作符时使用几个操作数。分别为123个操作数。

80、expr1&&expr2  先执行的是expr1是否为真,如果expr1是真就再判断expr2。如果为假的话,不管expr2怎么样都不再判断了。

81、对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用unsigned整型操作数。

82、我差点有弄混unsigned char。它是无符号整型。

83、又在操作符这部分了解了bitset.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值