标题:C++中的关键概念:名字查找与继承(一道面试题)
只看楼主
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
结帖率:80%
 问题点数:0 回复次数:3 
C++中的关键概念:名字查找与继承(一道面试题)
大侠们给讲解下,不是很明白!
//tt.h
#include<iostream>
using std::cout;
using std::endl;
class A {
protected:
    int m_data;
public:
    A(int data=0)
     {
        m_data = data;
     }
     int GetData()
     {
        return doGetData();
     }
    virtual int doGetData()
    {
        return m_data;
     }
};

class B: public A
{
 protected:
    int m_data;
 public:
     B(int data = 1)
    {
       m_data = data;
    }
     int doGetData()
    {
         return m_data;
    }
};

class C: public B
 {

protected:
    int m_data;
public:
    C(int data=2)
    {
        m_data = data;
     }
};   

class Base
{
 public:
   virtual int fun()
     {
       cout << "base: virtual int fun()" << endl;
        return 0;
    }

};

  class D1 : public Base
{
 public:
    int fun(int)
    {
        cout << "D1: int fun(int)" << endl;
       return 0;
    }
    int myfun(int, int)
    {
       cout << "Two int" << endl;
       return 0;
    }
};

 class D2 : public D1
 {
 public:
    int fun(int)
    {
        cout << "D2: int fun(int)" << endl;
        return 0;
    }
    int fun()
    {
       cout << "D2: int fun()" << endl;
       return 0;
    }
    int myfun(int, int, int)
    {
       cout << "Three int" << endl;
       return 0;
     }
 };
//tttest.cpp
#include"tt.h"
int main()
 {
   C c(10);
   cout << c.GetData() << endl;
   cout << c.A::GetData() << endl;
   cout << c.B::GetData() << endl;
   cout << c.C::GetData() << endl;

   cout << c.doGetData() << endl;
   cout << c.A::doGetData() << endl;
   cout << c.B::doGetData() << endl;
   cout << c.C::doGetData() << endl;

    D2 d2;
    //d2.myfun(2,2); //“D2::myfun”: 函数不接受 2 个参数。同一个类中定义的函数才可以重载,继承来的不行。

    d2.myfun(2,2,2);
    system("pause");
    return 0;
 }
大侠们给讲解下,不是很明白!
搜索更多相关主题的帖子: 概念 关键 名字 面试 
2010-09-26 13:58
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
得分:0 
                                 
2010-09-26 14:04
yangang2
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:64
专家分:432
注 册:2010-9-1
得分:0 
类D1的myfun函数被派生类D2中的myfun函数覆盖,在不是虚函数的情况下,如果派生类中新增的成员函数与它的基类的某一成员函数同名,则该函数会隐藏基类中所有该函数的重载。所以D1中的myfun隐藏了,即派生类D2的myfun函数隐藏了基类D1中的函数myfun。基类D1中的myfunc都不能通过对象d2来访问。除非改为d2.D1::myfun(2,2);才能间接访问到D1中的myfun函数
2010-09-26 16:15
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
得分:0 
...
2010-09-29 22:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-321396-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.118096 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved