Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4208496
  • 博文数量: 176
  • 博客积分: 10059
  • 博客等级: 上将
  • 技术积分: 4681
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-24 12:27
文章分类

全部博文(176)

文章存档

2012年(1)

2011年(4)

2010年(14)

2009年(71)

2008年(103)

分类: C/C++

2008-12-07 22:16:36

类public继承问题


趋势科技的一道面试题:

请看下面的程序,说说问题

#include
#include

using   namespace   std;  

class   Base   {  
public:  
    int   val;  
    Base()   {   val=1;};  
};  

class   Derive:   Base   {  
public:  
    int   val;  
    Derive(int   i)   {   val=Base::val+i;   };  
};  

int   main(int,   char**,   char**)   {  
    Derive   d(10);  
    cout<    
    system("PAUSE");
    return EXIT_SUCCESS;
}


编译的时候会出错,
main.cpp `Base' is an inaccessible base of `Derive'
   
在这一行‘    cout<仔细看Derive类,可以发现直接继承自Base,没有任何的‘public、private’等标识,
C++规定,没有标识选用默认的private,那么Derive类以private方式继承自Base,
Base内部的任何成员对于Derive来说都是不可见的,所以‘d.Base::val’这里出错了,

改为public方式继承就不会出问题(protected方式也会出错),程序如下:


#include
#include

using   namespace   std; 

class   Base   { 
public: 
    int   val; 
    Base()   {   val=1;}; 
}; 

class   Derive:  public Base   { 
public: 
    int   val; 
    Derive(int   i)   {   val=Base::val+i;   }; 
}; 

int   main(int,   char**,   char**)   { 
    Derive   d(10); 
    cout<   
    system("PAUSE");
    return EXIT_SUCCESS;
}


 
阅读(6375) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

eaglelbz2012-10-30 15:34:11

很基础