• 趋势的C++面试题


        1.
        
    class A{
        
    public:
                A() {func(
    0);};
                
    virtual void func(int data) {printf("A1 :%d\n",data);}
                
    virtual void func(int data) const {printf("A2 :%d\n",data);}
                
    void func(char *str) {printf("A3 :(%s)\n",str);}
        };

        
    class B:public A{
        
    public:
                
    void func()    {printf("B1 :%s\n","");}
                
    void func(int data)    {printf("B2 :%d\n",data);}
                
    void func(char *str)    {printf("B3 :(%s)\n",str);}
        };

        
    int main()
        {
                A 
    *pA;
                B b;
                
    const A *pcA;

                pA
    =&b;
                pA
    ->func(1);
                pA
    ->func("test");
                A().func(
    1);
                pcA
    =&b;
                pcA
    ->func(2);
                
    return 0;
        }

        程序运行的结果:
        A1 :
    0
        B2 :
    1
        A3 :(test)
        A1 :
    0
        A1 :
    1
        A2 :
    2

        
    1) 基类的指针指向派生类对象:那么该指针只能够调用基类所定义的函数,但是如果该函数为虚函数,则调用该派生类自己的成员函数。(B2 :1)
        
    2) 如果以派生类的指针指向基类对象,则必须事先做明显的转型操作,但是这种做法很危险。

        
    2.
        template
        
    void func(const int &t)
        {
                 cout
    <<t+100<<endl;
        }

        template
        
    void func(const T&t)
        {
                 cout
    <<t;
        }


        
    int main()
        {
                 func(
    10.3);
                 func(
    1000);

                 
    return 0;
        }

        程序运行结果:
        
    10.3
        
    1000

        如果上述函数改为
        
    void func(const int &t)
        {
                 cout
    <<t+100<<endl;
        }

        template
        
    void func(const T&t)
        {
                 cout
    <<t<<endl;
        }

        
    int main()
        {
                 func(
    10.3);
                 func(
    1000);

                 
    return 0;
        }

        则程序的运行结果为:
        
    10.3
        
    1100

        如果使用函数的非模板形式,不能在前面加上template关键字。

        
    3、改错:
        
    class klass
        {
        
    public:
                   klass(){}
        
    private:
                   
    ~klass(){}
                   
    void func(int n){
                           cout
    <<"klass!!"<<endl;
                    }
        
    public:
                   
    void test()
                  {
                          func(
    100);
                  }
        };

        
    int main()
        {
                 klass k;
                 k.test();

                 
    return 0;
        }
        运行后程序显示:error C2248: 
    'klass::~klass' : cannot access private member declared in class 'klass'
        证明析构函数的属性必须为public。
        但是,如果把klass k改为klass
    * pk; pk=new klass; pk->test();程序通过,但是klass不能释放.
  • 相关阅读:
    纯CSS实现气泡聊天框的方法
    css实现箭头矩形流程效果
    上传文件控件的样式美化
    Input placeholder 字体颜色更改
    如何为全局所有input组件添加边框发光效果
    JavaWeb:Filter(二)
    JavaWeb:Filter
    JavaWeb:EL & JSTL
    JavaWeb:标签(二)
    JavaWeb:简单的标签
  • 原文地址:https://www.cnblogs.com/super119/p/1996144.html
Copyright © 2020-2023  润新知