Re: Re: [cpp] 问一个关于拷贝构造函数的问题
Lemony
LemonyLoveXZ at 126.com
Fri Mar 17 11:40:55 CST 2006
ZiDing,您好!
就有一点 异议
我认为,私有继承时,私有基类的私有成员也不能被子类访问
class PrivateB : private Base
{
public:
void Foo()
{
_iPrivate = 0; //这里有错
_iProtected = 0;
}
};
这里就有错了.
不论任何继承方式,基类的私有成员都是不能被子类访问的
public:
void Foo()
{
_iPrivate = 0;//ERROR 不能访问private 定义
_iProtected = 0;
}
};
这里我认为非常正确
而且,对于私有继承方式
基类中的公有成员也会转变为私有成员
PrivateB privateB;
privateB.Foo(); //这里我认为 会错,赋值_iprivate时报错
ProtectedB protectedB;
protectedB.Foo(); //同上 赋值_iprivate时报错
privateB.FooBase();//ERROR 不能访问 protected 定义
protectedB.FooBase();//ERROR 不能访问 private 定义
return 0;
}
======= 2006-03-17 11:09:04 您在来信中写道:=======
>在 Thu, 16 Mar 2006 20:40:19 +0800,Oscar.Ken <oscar.ken at gmail.com> 写道:
>
>> 顺便出个小题目,下面代码中哪几行不能通过编译?(仅供娱乐)
>
>没有编译器,大概应该是如下得吧,各位看官给批批卷
>class Base
>{
>protected:
> int _iProtected;
>private:
> int _iPrivate;
>public:
> void FooBase()
> {
> _iPrivate = 0;
> }
>};
>//--------------------------------------------------------------------------------------
>class ProtectedB : protected Base
>{
>public:
> void Foo()
> {
> _iPrivate = 0;//ERROR 不能访问private 定义
> _iProtected = 0;
> }
>};
>//--------------------------------------------------------------------------------------
>class PrivateB : private Base
>{
>public:
> void Foo()
> {
> _iPrivate = 0;
> _iProtected = 0;
> }
>};
>//--------------------------------------------------------------------------------------
>int main(int argc, char* argv[])
>{
> PrivateB privateB;
> privateB.Foo();
> ProtectedB protectedB;
> protectedB.Foo();
> privateB.FooBase();//ERROR 不能访问 protected 定义
> protectedB.FooBase();//ERROR 不能访问 private 定义
> return 0;
>}
= = = = = = = = = = = = = = = = = = = =
致
礼!
Lemony
LemonyLoveXZ at 126.com
2006-03-17
More information about the Cpp
mailing list