zoukankan      html  css  js  c++  java
  • c++几个面试题

    题目一:

    static和const都可以修饰一个类的成员函数,请问:能不能同时用static和const修饰类的成员函数? 

    温馨提示:

    const的位置是在函数后边,修饰一个类的成员函数是写在函数的最后,而不是前边。前边的只是限制了返回值类型。

    分析:答案是不能的。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时static的用法和static是冲突的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

    题目二:

    运行下面代码,输出的结果是:

    A.h
    class A
    {
    private:
        int m;
    public:
        A(int a)
        {
            m=a;
        }
        void print1()
        {
            printf("Hello world");
        }
        void  print2()
        {
            printf("%d",m);
        }
    };
    

    main函数

     

    int main(int argc, const char * argv[]) {
        A* P=NULL;
        P->print1();
        P->print2();
        return 0;
    }


    运行结果会崩溃。

     

    分析:答案是print1调用正常,打印出Hello world,但运行至print2时,程序崩溃。调用print1时,并不需要P的地址,因为print1的函数地址是固定的。编译器会给print1传入一个this指针,该指针为NULL,但在print1中该this指针并没有用到。只要程序运行时没有访问不该访问的内存就不会出错,因此运行正常。在运行print2时,需要this指针才能得到m_value的值。由于此时this指针为NULL,因此程序崩溃了。

     

    题目三:

    运行下面代码,输出的结果是:

     

    class A
    {
    private:
        int m;
    public:
        A(int a)
        {
            m=a;
        }
        void print1()
        {
            printf("Hello world");
        }
        virtual void  print2()
        {
            printf("%d",m);
        }
    };
    
    main函数

     

     

    int main(int argc, const char * argv[]) {
        A* P=NULL;
        P->print1();
        P->print2();
        return 0;
    }
    程序崩溃

     

    分析:print1就不用多说,和上边的一样。当调用虚函数print2的时候,要根据实例(即this指针指向的实例)中虚函数表指针得到虚函数表,再从虚函数表中找到函数的地址。由于这一步需要访问实例的地址(即this指针),而此时this指针为空指针,因此导致内存访问出错。






  • 相关阅读:
    主流数据可视化工具介绍:帆软FineBI
    AngularJS之表格序号
    AngularJS之表格设置样式
    正则点号和问号 +
    中国市场主流商业智能工具的对比
    ssh 认证指定端口
    EL表达式中获取list长度
    java 如何将byte中的有效长度转换为String
    RedHat Enterprise Linux 6.4-x86_64 md5:467B53791903F9A0C477CBB1B24FFD1F
    14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
  • 原文地址:https://www.cnblogs.com/shuaigezhaoguang/p/5847240.html
Copyright © 2011-2022 走看看