#之间的差异包括H和#包括文件名。

#包括文件名。H意味着编译器将开始寻找这个文件从当前工作目录

#包括意味着编译器将开始寻找这个文件从标准库目录


两。头文件的作用

Strengthening safety inspection

库函数可以很容易地被头文件调用,而不必关心它的实现。


三,*,修饰语的位置

对于*和修饰符,为了避免误解,最好使修饰符接近变量名。


四,if语句

不要将布尔变量与任何值进行比较,这很容易出错。

塑性变量必须与相同类型的值进行比较。

浮点变量比点更好,即使对值有限制。

指针变量比较为null,不比较布尔和塑料。


比较五,const和#定义

常量有数据类型,而#定义没有数据类型

const可以调试在单独的编译器,和#定义无法调试

在类中定义常量有两种方法

1。当类被声明为常量而不是赋值时,类在构造函数初始化表中被赋值。

2。而不是const常量使用枚举。


传输模式的中位数六和C++函数

有三种方法:值传递(通过值)、指针传递(指针传递)、引用转换(通过引用传递)。

按值传递空趣(char)

通过指针传递空乐趣(char)

引用的空乐趣(char)

如果输入参数是通过值传递的,最好使用引用转换,因为引用传递消除了临时对象的结构和结构。

函数的类型不能省略,即使没有添加空。


七。函数中的指针或引用常量不能返回。

char函数(空)

{

字符;

这是不返回的,因为STR是一个指定的变量,而不是一般值函数结束后将被注销。

返回字符;

}

函数中的指针变量不会随着函数的消失自动释放。


八,内存复制函数的实现主体

void * memcpy(void * pvto,const void * pvfrom,size_t大小)

{

断言((pvto!= null)(pvfrom!= NULL);

字节*分= pvto(字节*); / /防止地址变更

因此字节* =(字节*)pvfrom;

而(大小> 0)

分pbform + + + + =;

返回pvto;

}


九。内存分配

分布有三种。记住,也许有人会在面试当天问你这个问题。

1。在编译过程中已经分配的静态存储区域存在于整个操作中,例如全局变量和常量。

2。在堆栈上,函数中的本地变量是从这个分配的,但是分配的内存很容易受限。

3、在堆上分配,又称动态分配,比如我们用新的malloc来分配内存,删除,自由释放内存。


十。内存分配通知

当内存被分配新的或malloc,这个指针的初始值必须指定。

在删除或释放内存之后,您必须将指针指向null。

无法将指针数据修改为常量


十一、内容复制与比较

数组……

char = Hello单词!;

char b { 10 };

Strcpy(B,A);

如果(StrCmp(A,B)= = 0)

{ }

指针……

char = Hello单词!;

字符*;

P =新的字符串strlen(){ 1 };

Strcpy(P,A);

如果(StrCmp(p,a)= = 0)

{ }


十二,sizeof的问题

记住,C++不知道指针所指对象的大小,和指针的大小都是4字节。

char = Hello World!

char;

计数
计数
此外,在函数中,数组参数退化为指针,因此下面的内容始终输出到4。

虚空乐趣(char { 1000 })

{

计数
}


十三。在指针

1。指针在创建指针时必须初始化。

2。指针在空或删除后必须为空。

3,指针的长度为4字节。

4。当内存释放时,如果它是数组指针,必须释放所有内存,如

char =新的char { 100 };

Strcpy(P,你好世界);

在数量的前面删除

p=null;

5,数组指针的内容不能比数组指针更容易。

如:

char =新的char { 5 };

Strcpy(P你好世界); / /错误没有足够大的目标

在数量的前面删除

p=null;


十四。关于malloc /自由和新/删除

l malloc /自由是C / C +内存分配器,和新的 /删除是C++的内存分配器。

注意:malloc /免费是一个库函数,和新的 /删除操作

l malloc /自由不能执行构造函数和析构函数,新/删除

l新 /删除不能运行在C,所以malloc /自由不能被淘汰

这两个L必须成对使用。

l C++的_set_new_hander函数可以用来定义内存分配的例外处理


特点十五、C++

新的C++增加重负荷四个机制(过载),内联(inline),Const,虚拟

重载和内联:它可以用作一个全局函数或一个类的成员函数。

常量和虚拟:只能用于类的成员函数;

重载:在同一个班,函数名称相同。它是由不同的参数调用该函数,函数不能用virtual关键字的要求。同名的函数为全局函数不叫重载。如果同名的全局函数是在类称,全球参考符号必须使用参考。

覆盖率是派生类函数覆盖基类函数的函数。

函数的名称是相同的;

参数相同。

基类函数必须具有虚拟关键字;

不同的范围(派生类和基类)。

隐藏是指从同一个函数屏蔽基类相同名称函数的派生类。

1。函数名相同,但参数不同。此时,无论基类是否有虚拟关键字,基类都会被隐藏。

2,函数名相同,参数相同,但基类没有虚拟关键字(它被覆盖),基类函数将被隐藏。

内联:内联关键字必须与定义一起放在一起,不仅在声明中。

Const:常量是常量的缩写,常量是常数,由常量修改的事物受力保护,可以防止意外的变化,提高程序的健壮性。

1,参数被用作指针参数的输入,加上常量可以通过意外变化来防止。

2,当根据值引用用户类型时,最好将值传递给引用,并添加const关键字以提高效率:

更改空函数(a)以使函数无效(常量A)。

和空函数(int)不必被更改为无效函数(常量int);

三.函数返回值的指针类型加const的函数的返回值不能被修改,并指定变量只能是一个const类型变量。例如,函数const char* GetString(void);char * str = GetString()会犯错误。和const char * str = GetString()是正确的。

4、const成员函数,这个函数只能调用const成员变量在体内提高程序的鲁棒性。如声明函数int const getCount(void);这个函数只能在体内调用const成员变量。

虚拟:虚函数:派生类可以覆盖的功能,纯虚函数:只有空函数,没有函数实现体;


十六、对externc的影响是什么

externC是一个用C++连接提供交易所指定的符号,这段代码是用来告诉C++的C函数,这是因为在C++编译的库函数名会变得很长,这与C生成的不一致,导致C++不能直接调用C函数。Extren - C加入后,C++可以直接调用C函数。

externC主要采用正常的DLL函数参考和出口时使用的C函数和C头文件包含在C++。你可以在它的前面使用关键字extern C。


十七构造函数和析构函数

派生类的构造函数应该在初始化窗体中调用基类的构造函数;

派生类和基类的析构函数应该用虚拟关键字添加。

不要小看构造函数和析构函数,但是不容易弥补。

#包括

阶级基础

{

公共:

虚拟~基地(){ cout
};

派生类:公共基础

{

公共:

虚拟~来源(){ cout
};

空主(空)

{

基地铅=新*源; / /向上

删除铅;

}

输出结果如下:

~衍生

~基地

如果析构函数不是虚拟的,则输出结果为

~基地


十八、什么是# ifndef / #角色定义 / # endif

重复头文件是重复的。