zoukankan      html  css  js  c++  java
  • C/C++笔试题整理

    1. C的结构体和C++结构体的区别

    (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。

    (2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 

    (3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

     以上都是表面的区别,实际区别就是面向过程和面向对象编程思路的区别:

    C的结构体只是把数据变量给包裹起来了,并不涉及算法。

    而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。 

    C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

    2. 如何在类中定义常量成员并为其初始化?解答:只能在初始化列表里对const成员初始化,像下面这样:

    class CBook {
    public:
        const double m_price;
        CBook() :m_price(8.8) { }
    };

    3. 在定义类的成员函数时使用mutable关键字的作用是什么?解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,防止出现编译出错。例子如下:

    class CBook {
    public:
      mutable double m_price;  // 如果不加就会出错
      CBook(double price) :m_price(price) { }
      double getPrice() const; // 定义const方法
    };
    double CBook::getPrice() const {
      m_price = 9.8;
      return m_price;
    }

    4. C++中的explicit关键字有何作用?

    禁止将构造函数作为转换函数,即禁止构造函数自动进行隐式类型转换。 
    
    例如CBook中只有一个参数m_price,在构建对象时可以使用CBook c = 9.8这样的隐式转换,使用explicit防止这种转换发生。

    5. 构造函数调用类的另一个构造函数问题:

      在C++中,如果确定了某一个构造函数的创建过程,在该构造函数中如果调用了其它重载的构造函数

      它初始化的并不是指定的这个this了。

      例子说明如下:

    class CBook {
    public:
      double m_price;
      CBook() {
        CBook(8.8);
      }
      CBook(double price) : m_price(price) { }
    };
    int main() {
      CBook c;
      cout << c.m_price << endl;  // 此时并不会输出理想中的8.8
    }

    6. 虚函数原理考点,例如下面程序的输出是什么?

    class A {
    public:
      virtual void funa();
      virtual void funb();
      void func();
      static void fund();
      static int si;
    private:
      int i;
      char c;
    };

    问:sizeof(A) = ?

    解答:

    关于类占用的内存空间,有以下几点需要注意: 

    (1)如果类中含有虚函数,则编译器需要为类构建虚函数表,类中需要存储一个指针指向这个虚函数表的首地址,注意不管有几个虚函数,都只建立一张表,所有的虚函数地址都存在这张表里,类中只需要一个指针指向虚函数表首地址即可。 

    (2)类中的静态成员是被类所有实例所共享的,它不计入sizeof计算的空间 

    (3)类中的普通函数或静态普通函数都存储在栈中,不计入sizeof计算的空间 

    (4)类成员采用字节对齐的方式分配空间

    答案:12(32位系统)或24(64位系统)

    7. 虚继承的作用是什么?

    在多继承中,子类可能同时拥有多个父类,如果这些父类还有相同的父类(祖先类),那么在子类中就会有多份祖先类。例如,类B和类C都继承与类A,如果类D派生于B和C,那么类D中就会有两份A。为了防止在多继承中子类存在重复的父类情况,可以在父类继承时使用虚函数,即在类B和类C继承类A时使用virtual关键字,例如: 

    class B : virtual public A 

    class C : virtual public A 

    注:因为多继承会带来很多复杂问题,因此要慎用。

    8. 守护函数的编写过程:

    • 创建子进程,关闭父进程;
    • 设置文件权限掩码。当进程创建新文件(使用open(const char *pathname, int flags, mode_t mode)系统调用时,文件的权限将是mode&0777;
    • 创建新会话,设置本进程为进程组的首领;
    • 切换工作目录;
    • 关闭标准输入设备、标准输出设备和标准错误输出设备;
    • 关闭其他已经打开的文件描述符;
    • 将标准输入、标准输出、标准错误重定向到/dev/null文件

    9. 一个基类声明了一个virtual函数,在子类当中将这个virtual函数改成私有,之后用一个指向子类的父类指针去调用这个函数,会有什么情况,为什么?

      正常执行之类的私有函数成员,不会因为是私有成员函数就发生调用错误。原因:通过父类的公有(public)成员函数接口调用,虚函数的调用其实就是找到虚函数表的相应指针。

    10. 在main函数代码执行前打印一个字符串,C++该如何做,C该如何做?

      C++:定义一个类A,在类的构造函数中打印这么一个字符串,然后声明类A的一个对象为全局变量。

      C:???不知道啊,求救!

  • 相关阅读:
    简单的嵌套循环
    七、 二进制位运算
    六、字符串格式化--------列表常用操作
    JavaScript取消默认控件并添加新控件(DOM编程艺术第11章)
    JavaScript 字符串拼接 & setInterval()实现简单动画
    伪站创建代码-山东理工
    CSS常用样式
    CSS基础知识
    HTML5其他标签应用
    HTML表单的应用
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4130546.html
Copyright © 2011-2022 走看看