zoukankan      html  css  js  c++  java
  • 趋势的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不能释放.
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/super119/p/1996144.html
Copyright © 2011-2022 走看看