C方向讲解Word格式.docx

上传人:b****5 文档编号:18829602 上传时间:2023-01-01 格式:DOCX 页数:7 大小:19.78KB
下载 相关 举报
C方向讲解Word格式.docx_第1页
第1页 / 共7页
C方向讲解Word格式.docx_第2页
第2页 / 共7页
C方向讲解Word格式.docx_第3页
第3页 / 共7页
C方向讲解Word格式.docx_第4页
第4页 / 共7页
C方向讲解Word格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

C方向讲解Word格式.docx

《C方向讲解Word格式.docx》由会员分享,可在线阅读,更多相关《C方向讲解Word格式.docx(7页珍藏版)》请在冰豆网上搜索。

C方向讲解Word格式.docx

class 

Empty 

 

public:

Empty();

//缺省构造函数 

Empty(const 

&

);

 

//拷贝构造函数 

~Empty();

//析构函数 

operator=(const 

//赋值运算符 

Empty* 

operator&

();

//取址运算符 

const 

() 

const;

 

//取址运算符

};

(5)多态的作用?

主要是两个:

1.隐藏实现细节,使得代码能够模块化;

扩展代码模块,实现代码重用;

2.接口重用:

为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

(6)类成员函数的重载、覆盖和隐藏区别?

a.成员函数被重载的特征:

1)相同的范围(在同一个类中);

2)函数名字相同;

3)参数不同;

4)virtual关键字可有可无。

b.覆盖是指派生类函数覆盖基类函数,特征是:

1)不同的范围(分别位于派生类与基类);

3)参数相同;

4)基类函数必须有virtual关键字。

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

1)如果派生类的函数与基类的函数同名,但是参数不同。

此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。

此时,基类的函数被隐藏(注意别与覆盖混淆)。

(7)在C++程序中调用被C编译器编译后的函数,为什么要加extern"

C"

?

C++语言支持函数重载,C语言不支持函数重载。

函数被C++编译后在库中的名字与C语言的不同。

假设某个函数的原型为:

voidfoo(intx,inty);

该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。

C++提供了C连接交换指定符号extern"

来解决名字匹配问题。

(8)面向对象程序设计的优点?

开发时间短,效率高,可靠性高。

面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。

(9)什么是单例模式?

保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

(10)构造和析构的次序

1.构造顺序:

构造虚基类->

构造基类(从左到右)->

初始化列表->

构造函数体。

2.析构顺序:

(与构造顺序完全相反)

析构函数体->

清除成员变量->

析构基类部分(从右到左)->

析构虚基类部分。

(11)C++中new-delete与malloc-free的区别!

new建立的是一个对象;

malloc分配的是一块内存.

详细如下:

1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。

它们都可用于申请动态内存和释放内存

2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。

对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。

由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。

注意new/delete不是库函数。

4.C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

5.new可以认为是malloc加构造函数的执行。

new出来的指针是直接带类型信息的。

而malloc返回的都是void*指针。

newdelete在实现上其实调用了malloc,free函数

6.new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间;

malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针.

(12)声明内联函数的规则?

1)、含有递归调用的函数不能设置为inline;

2)、使用了复杂流程控制语句:

循环语句和switch语句,无法设置为inline;

3)、由于inline增加体积的特性,所以建议inline函数内的代码应很短小。

最好不超过5行。

4)、inline仅做为一种“请求”,特定的情况下,编译器将不理会inline关键字,而强制让函数成为普通函数。

出现这种情况,编译器会给出警告消息。

5)、在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,如果在前面声明为普通函数,而在调用代码后面才定义为一个inline函数,程序可以通过编译,但该函数没有实现inline。

(13)面向对象的三大特性。

封装、多态、继承

(14)宏与函数的区别。

1.内联函数在运行时可调试,而宏定义不可以;

2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;

3.内联函数可以访问类的成员变量,宏定义则不能;

4.在类中声明同时定义的成员函数,自动转化为内联函数。

(15)cstdio与stdio.h的区别

在C语言中,stdio.h头文件是主要的。

而在后来的C++语言中,C只是C++的一个子集,且C++中,已不推荐再用C的类库,但为了对已有代码的保护,还是对原来的头文件支持。

cstdio是c++从C的stdio.h继承来的,在前面加C同时不要H后缀,在C++环境当然是选用前者,两者内容都一样,只是cstdio头文件中定义的名字被定义在命名空间std中。

使用后者就会带来额外的负担,需要区分哪些是

标准库明是C++特有的,哪些是继承过来的!

所以在C++中要尽量避免C风格的出现!

(16)extern的作用。

1)在C/C++中的应用,声明外部变量(全局变量)。

2)在C++文件中调用C方式编译的函数。

2、中等题

(17)一个栈的入栈顺序是A,B,C,D,E,则器出栈顺序不可能是?

()

A.EDCBA

B.DECBA

C.DCEAB

D.ABCDE

C

C选项中AB次序出错,

如果想要AB这样输出,只能是A入栈立刻出栈,B入栈出栈。

A没有立刻出栈,则B一定会首先出栈。

(18)C++中不能被派生类继承的函数有?

构造函数、析构函数

(19)看如下程序:

voidFUN(charstr[100]){

cout<

<

sizeof(str)<

endl;

}

输出什么结果?

4

数组传参退化成指针

(20)介绍一下STL,简单说明STL如何实现vector。

STL(标准模版库,StandardTemplateLibrary)它由容器算法迭代器组成。

STL有以下的一些优点:

1)可以方便容易地实现搜索数据或对数据排序等一系列的算法;

2)调试程序时更加安全和方便;

vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。

3、困难题

(21)C++在main()函数之前执行了什么?

(注:

回答蓝色部分即可)

全局对象的构造函数,malloc需要的必要资源堆栈的初始化等。

(22)const与#define比较有何优点?

1)const常量有数据类型,而宏常量没有数据类型。

编译器可以对前者进行类型安全检查。

而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

(23)一个空类的大小为多少?

请举例说明为什么?

不为0,大多数编译器确定为1

例如classA{};

定义A[4];

如果为大小为0,则不能确定A[0]A[1]的位置。

(24)如何让一个程序在main函数退出后继续执行?

使用atexit()或者_onexit()注册一个函数。

(25)查找错误

voidtest1()

{

 charstring[10];

 char*str1="

0123456789"

;

 strcpy(string,str1);

数组越界

(26)将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?

(1)不能返回局部变量的引用。

(2)不能返回函数内部new分配的内存的引用。

(3)可以返回类成员的引用,但最好是const。

(4)流操作符重载返回值申明为“引用”的作用,流操作符<

和>

>

(27)什么是多态?

它是怎么实现的?

一个接口多种方法。

编译器为每个类的对象提供一个虚表指针,这个指针指向对象所属类的虚表。

在程序运行时,根据对象的类型去初始化vptr,从而让vptr正确的指向所属类的虚表,从而在调用虚函数时,就能够找到正确的函数。

对于虚函数调用来说,每一个对象内部都有一个虚表指针,该虚表指针被初始化为本类的虚表。

所以在程序中,不管你的对象类型如何转换,但该对象内部的虚表指针是固定的,所以呢,才能实现动态的对象函数调用。

(28)内存分配的方式

1)静态存储区,程序编译时就分配好了,在整个程序运行期间都存在,如全局变量、常量

2)栈上分配,函数内的局部变量的分配方式,但分配的内存容易有限制

3)堆分配,如new,malloc分配的内存,需要手动释放

(29)strcpy()和memecpy()区别是什么?

strcpy()和memcpy()都能用来拷贝某一块内存中的内容。

但strcpy传入参数为char*并且以’\0’结束

memcpy()传入参数为void*需要指定拷贝的长度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1