Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 517|回复: 0

[默认分类] C++经典面试题(一)

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-5 18:18:53 | 显示全部楼层 |阅读模式

    最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。
    一是从来没有这个意识,二是没有认真的梳理下。
    下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!




    1.C和C++中struct有什么区别?
    1> C++中的struct类似于class,有变量,有构造函数、虚函数等,有继承,多态等类的特征;
    2> C中的struct只有变量,不能有函数,但是可以有函数指针




    2.C++中的struct和class有什么区别?
    在C++中,两者区别不大,但是有2个主要的区别
    1>. 继承权限:struct默认是public继承;class默认是private继承
    2>. 访问权限:struct默认是public访问;class默认是private访问




    3.如何判断一段程序是由C 编译程序还是由C++编译程序编译的?  
    【标准答案】
    #ifdef __cplusplus
    cout<<“c++";
    #else
    cout<<"c";
    #endif
    (这个以前还真没注意过,涨姿势了。。。)




    4.C和C++有什么不同?
    【参考答案】
    从机制上:
    c是面向过程的(但c也可以编写面向对象的程序);
    c++是面向对象的,提供了类。但是,c++编写面向对象的程序比c容易。


    从适用的方向: c适合要求代码体积小的,效率高的场合,如嵌入式; c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。


    从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比 c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++。


    C语言是结构化编程语言,C++是面向对象编程语言。 C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。


    关于这个问题,个人觉得《Effective C++》上面第一条说的很好,
    View C++ as a federation of languages. 把C++当做一个语言联邦。
    C++由四部分组成
    1> C语言部分;
    2> 面向对象部分,包括封装、继承、多态这些C语言所没有的特性;
    3> 泛型编程部分,大多数类、函数要考虑到把它设计成模板,方便复用;
    4> STL库,里面封装了大量的优秀模板,是 3> 中内容的集成, 学会使用它们可以让代码更高效。当然,最好去深入了解STL源码,那样会对C++有更深的理解。




    5.“引用”与指针的区别是什么?
       【参考答案】
    指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。
    程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。


    在另一本C++著作《More Effective C++》里,第一条就是论述 point 和 reference的区别
    总结一下 ,
    1> 指针是一个存储地址的变量,而引用是一个变量的别名。所以在一个函数中,传引用要比传指针速度更快。
    2> 指针可以指向一个空值,而引用必须初始化。指针可以如下形式出现

    1. int *p;
    复制代码
    是合法但不合理的(相当于是一个野指针)。

    可以声明一个指向空值的指针

    1. int *p=null
    复制代码

    而引用不行


    1. int &r;
    复制代码
    是错误的

    引用必须初始化为一个变量的别名,如

    1. int a=5;
    2. int &r=a;
    复制代码

    3> 也是因为 2>的特性,指针在使用前要判断是否为空,而引用必定不为空(否则会报错),所以不用判断。



    4> 指针可以更改指向的内存地址,而引用是和变量绑定的,不可更改。


    5> 在运算符重载过程中,通常返回一个引用往往比返回一个指针更好,使用指针易引起语义上的歧义。




    6.
    class A
    {

    virtual void func1();  
    void func2();

    } ;

    class B: class A
    {
    void func1()
    {
    cout < < "fun1 in class B" < < endl;
    }  
                  virtual void func2()
                 {
                                cout < < "fun2 in class B" < < endl;
                 }
    A, A中的func1和B中的func2都是虚函数
    B, A中的func1和B中的func2都不是虚函数.
    C, A中的func2是虚函数.,B中的func1不是虚函数.
    D, A中的func2不是虚函数,B中的func1是虚函数.



    【标准答案】A

    水题。。




    7.int id[sizeof(unsigned long)];这个对吗?为什么?

    【标准答案】
    正确
    这个 sizeof是编译时运算符,编译时就确定了 可以看成和机器有关的常量。





    8.某文件中定义的静态全局变量(或称静态外部变量)其作用域是 ()?
    A.只限某个函数 B.本文件   C.跨文件 D.不限制作用域
      
    【参考答案】B。静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。



    在《C和指针》上看过,static关键字会改变具有外部链接性的变量和函数




    9.C++函数中值的传递方式有哪几种?
    【标准答案】
    C++函数的三种传递方式为:值传递、指针传递和引用传递。
    (指针传递就是通常说的地址传递)




    10.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

    【标准答案】c用宏定义,c++用inline
    define实现的函数功能容易出bug,所以在c++中最好不要使用






    未完。。。待续(*^_v_^*)


















      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 23:08 , Processed in 0.389194 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表