100道c++面试题(上)

时间:2022-09-09 16:10:41

1. new, delete, malloc, free关系

new/delete是c++的运算符,delete会调用对象的析构函数;

malloc/free是c/c++的标准库函数,free只释放内存。

2. delete和delete[]的区别

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。

3. 对比c++和java

4. 继承的优缺点

5. c++有哪些性质(面向对象特点)

封装、继承、多态

6. 子类析构时要调用父类的析构函数吗?no

7. 说说多态,虚函数,纯虚函数。

c++的多态具体体现在运行和编译两方面:在运行时的多态通过继承和虚函数来体现;编译时的多态体现在函数和运算符的重载。

抽象类不能用于直接创建对象实例,但仍可使用指向抽象类的指针支持运行时多态性。(没理解qaq)

8. 求返回值(微软)

int func(x)

{

int countx = 0;

while(x)

{

countx ++;

x = x&(x-1);

}

return countx;

}

答案:8

思路:将x转化成2进制,看含有1的个数。

9. 什么是“引用”?申明和使用“引用”要注意哪些问题?

注意:引用不占存储单元。不能建立数组的引用。

10. 将“引用”作为函数参数有哪些特点?

11. 在什么时候需要使用“常引用”?

既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变。

const 类型标识符 &引用名=目标变量名

注意:

试图将const型对象转换为非const型是非法的;

引用型参数应该在能被定义为const的情况下,尽量定义为const。

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

格式:类型标识符 &函数名 (形参列表及类型说明) {//函数体}

好处:在内存中不产生被返回值的副本;

注意:参考Effective C++

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

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

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

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

返回流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上针对不同的对象!

返回指针,则不能连续使用<<操作符。

因此,返回流对象的引用是唯一选择。

例:#include<iostream.h>

int &put(int n);

int vals[10];

int error=-1;

void main()

{

put(0)=10;

put(9)=20;

cout<<vals[0];

cout<<vals[9];

}

int &put(int n)

{

if (n>=0&&n<=9)return vals[n];

else{cout<<"";return error;}

}

(5)在另外一些操作符中,却千万不能返回引用:+-*/四则运算符,只能返回对象。

13. “引用”与多态的关系?

引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。

14. “引用”与指针的区别?

15. 什么时候需要“引用”?参考:http://develop.csai.cn/c/NO0000021.htm

16. struct和union有何区别?

(1)结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而

结构的所有成员都存在(不同成员的存放地址不同)。

(2)对于联合的不同成员赋值,将会对其它成员重写,原来成员的赋值就不存在了,而对于结构的不同成员赋值是互不影响的。

17. 关于“联合”的代码的输出?

a) # include <stdio.h>

union

{

int i;

char x[2];

}a;

void main()

{

a.x[0] = 10;

a.x[1] = 1;

printf("%d",a.i);

}

答案:266(低位低地址,高位高地址,内存占用情况是Ox010A

b)

main()

{

union{

int i;

struct{

char first;

char second;

}half;

}number;

number.i=0x4241;

printf("%c%cn",number.half.first,number.half.second);

number.half.first='a';

number.half.second='b';

printf("%xn",number.i);

getch();

}

答案:AB(0x41对应'A',是低位;Ox42对应'B',是高位)6261(number.i和number.half共用一块地址空间)

18. 关联、聚合(Aggregation)以及组合(Composition)的区别?

关联是两个类的一般性联系;

聚合表示has-a关系,用空的菱形表示;

组合表示contains-a关系,关联性强于聚合。组合类和被组合类有相同生命周期,组合类要对被组合类负责,用实心菱形表示。

19. 说说面向对象的三个基本特征?

封装、继承、多态(允许将子类类型的指针赋值给父类类型的指针)

20. 重载(overload)和重写(override)的区别?早绑定和晚绑定。

21. 多态的作用?

(1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;

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

22. Ado于Ado.net的异同?

23. new delete于malloc free

24. # define DOUBLE(x) x+x, i=5*DOUBLE(5); i是多少?30

25. 有哪几种情况只能用initialiaztion list而不能用assignment?

当类中含有const, reference成员变量;基类的构造函数都需要初始化列表。

26. c++是不是类型安全的?不是,两个不同的指针类型可以强制转换。c#是类型安全的。

27. main函数执行以前,还会执行什么代码?全局对象的构造函数

28. 描述内存分配方式以及它们之间的区别?

(1)从静态存储区域分配。(2)在栈上创建。(3)从堆上分配,亦称动态内存分配。程序员自己用malloc/free,new/delete

29. struct和class的区别?struct的成员默认是公有的,class的成员默认是私有的。

30. 当一个类A中没有任何成员变量与成员函数,这时sizeof(A)的值是多少?非零。

31. 在8086汇编下,逻辑地址和物理地址是怎么转换的?(Intel)

通用寄存器给出的地址,是段内偏移地址,相应段内寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。

32. 比较c++的4种类型转换方式?

33. 分别写出bool,int,float,指针变量a与“零”比较的语句。

bool:  if(!a) or if(a)

int:  if(a==0)

float:  const EXPRESSION EXP = 0.000001

if (a<EXP&&a>-EXP)

pointer: if(a!=NULL) or if(a=NULL)

34. 请说出const和define想比有何优点?

35. 简述指针和数组的区别。

......注意,当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

36. 求两个数中最大的一个,不允许用"if", "?", "switch"或者其它判断语句。

((a+b)+abs(a-b))/2

37. 如何打印出当前源文件的文件名以及源文件的当前行号?

cout<<__FILE__;cout<<__LINE__;//系统预定义宏。

38. 如何判断一段程序是由C编译的还是C++编译的?

#ifdef __cplusplus

cout<<"c++";

#else

cout<<"c";

#endif

39. 运算符优先级:赋值运算符<逻辑与运算符<关系运算符<算术运算符

40. 纯虚函数怎么实现的?在编译原理上讲下?

100道c++面试题(上)的更多相关文章

  1. 100 道 Linux 笔试题,能拿 80 分就算大神!

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统C. 跟踪管理系统信息和错 ...

  2. 整理100道 &period;net面试题

    前段时间,我在准备面试的时搜到的一套 net开发人员面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需. 1. .NET和C#有什么区别 答:.NET一般指 ...

  3. 推荐收藏:100道Linux笔试题,能拿90分以上的都去了BAT

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和 ...

  4. 100道&period;net面试题

    简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该 ...

  5. 100 道 Linux 笔试题

    1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度 2. 在大多数Linux发行版本中 ...

  6. 100道C&num;面试题(&period;net开发人员必备)

    1. .NET和C#有什么区别 答:.NET一般指 .NET FrameWork框架,它是一种平台,一种技术. C#是一种编程语言,可以基于.NET平台的应用. 2.一列数的规则如下: 1.1.2.3 ...

  7. 100道iOS面试题

    面试题: 1__weak什么时候用 想要在block内部变外部变量需要加__weak或者__block 2.是否使用过coreImage和coreText?如果使用过,说说你的体验(答案在另一份) 3 ...

  8. Linux运维必会的100道MySql面试题之(一)

    01 如何启动MySql服务 /etc/init.d/mysqld start service mysqld start Centos 7.x 系统 sysctl  start mysqld 02 检 ...

  9. 100道Java面试题整理(助力2020面试!)

    1.您对微服务有何了解? 微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 . 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物.他 ...

随机推荐

  1. jquery实现更多内容效果

    体验效果:http://hovertree.com/texiao/jquery/33/ 写个“更多内容的展开/收起”的js 代码如下: <!DOCTYPE html> <html&g ...

  2. 洛谷P1288 取数游戏II

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  3. freeCodeCamp&colon;Check for Palindromes

    如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文). 注意你需要去掉字符串多 ...

  4. Qt之QTableView添加复选框(QAbstractTableModel)

    简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. ...

  5. 【转】ubuntu 11&period;10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  6. bat修改密码

    @echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...

  7. 阿里云API网关(3)快速入门(调用 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  8. SharePoint2007 开发部署Application Pages

    介绍:SharePoint应用程序页,也就是_layouts路径下的aspx页面,服务器C:\Program Files\Common Files\Microsoft Shared\web serve ...

  9. 新浪SAE创建微信模板消息应用与SVN的使用

    本地项目源文件必须放在应用名目录下面的数字目录里面.如:D:\SVN\xtmp1\1 我们在前面讲述在新浪SAE中如何建站,今天我们来详解如何上传文件.新浪SAE中是不允许用FTP来上传的.我们只能用 ...

  10. 2018&period;12&period;05 codeforces 961E&period; Tufurama(主席树)

    传送门 一眼主席树sbsbsb题(%%%树状数组大佬们). 简化题意:求满足x<y,y≤ax,x≤ayx<y,y\le a_x,x\le a_yx<y,y≤ax​,x≤ay​的(x, ...