类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;
}
阅读(6414) | 评论(1) | 转发(0) |