C++面试常见问答题看这三篇文章就够了(中)

举报
liuzhen007 发表于 2021/05/26 13:06:50 2021/05/26
【摘要】 目录   前言 正文 1. 构造函数为什么不能声明为虚函数? 2. 析构函数为什么声明为虚函数? 3. C++中,能作为函数重载判断依据的是? 4. 浅复制和深复制的区别 5. 使用select函数检查读超时的用法 6. 外部变量定义在所有函数之外,它的作用域? 7. 模板的使用是为了什么? 8...

目录

 

前言

正文

1. 构造函数为什么不能声明为虚函数?

2. 析构函数为什么声明为虚函数?

3. C++中,能作为函数重载判断依据的是?

4. 浅复制和深复制的区别

5. 使用select函数检查读超时的用法

6. 外部变量定义在所有函数之外,它的作用域?

7. 模板的使用是为了什么?

8. 不能被重载的运算符

9. 采用函数重载的目的是什么?

10. const和#define定义常量的区别

11. 调用一成员函数时, 使用动态联编的情况是?

12. 在结构化的程序设计中,模块划分的原则是?

13. 若main()函数带参数 ,参数个数最多是几个?

14. char是有符号还是无符号类型?

15. 哪些因素可能会影响到一个类的大小?

16. &和&&的区别

17. #if defined() 和#if !defined()的简写方式


前言

《C++面试常见问答题看这三篇文章就够了(上)》

《C++面试常见问答题看这三篇文章就够了(中)》本文

《C++面试常见问答题看这三篇文章就够了(下)》

正文

1. 构造函数为什么不能声明为虚函数?

1)构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类,无法确定。 
2)虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行。析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。

2. 析构函数为什么声明为虚函数?

如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。

3. C++中,能作为函数重载判断依据的是?

const、参数个数、参数顺序。

4. 浅复制和深复制的区别

1)浅层复制,只复制指向对象的指针,而不复制引用对象本身。
2)深层复制,复制引用对象本身。
3)如果是浅复制,修改一个对象可能会影响另外一个对象。
4)如果是深拷贝,修改一个对象不会影响到另外一个对象。

5. 使用select函数检查读超时的用法

if (select(sockfd + 1,&fs,NULL,NULL,&timeout) == 0)

6. 外部变量定义在所有函数之外,它的作用域?

其定义位置开始到整个文件结束。

7. 模板的使用是为了什么?

提高代码的可重用性。

8. 不能被重载的运算符

1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符)

9. 采用函数重载的目的是什么?

使用方便,提高可靠性。

10. const和#define定义常量的区别

1)define宏是在预处理阶段展开,const常量是编译运行阶段使用。

2)宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查。

3)define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。const常量会在内存中分配(可以是堆中也可以是栈中)。

11. 调用一成员函数时, 使用动态联编的情况是?

通过指针或引用调用一虚函数。

12. 在结构化的程序设计中,模块划分的原则是?

模块内具有高内聚度,模块间具有低耦合度。

13. 若main()函数带参数 ,参数个数最多是几个?

2个,请看定义形式:

main(int argc,char* argv[])

14. char是有符号还是无符号类型?

取决于具体实现。

15. 哪些因素可能会影响到一个类的大小?

成员个数、是否有虚函数、对齐方式。

16. &和&&的区别

1)对于&和&&,当运算符两边的表达式为true时,结果均为true,只要有一边运算结果为false,则结果均为false。
2)如果运算符左边计算结果为false,则&&不会再继续计算右边表达式值。
3)&可以作为位运算符,而&&不能。

17. #if defined() 和#if !defined()的简写方式

#ifdef 和 #ifndef

 

 

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/110506813

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。