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