回复: Re: [cpp] 问一个关于拷贝构造函数的问题

Xiao Guo Li lxgbrian at yahoo.com.cn
Thu Mar 16 22:12:20 CST 2006


又查了一下书,问题搞清楚了,存取权限是针对作用域来说的。只要在类的作用域中,私有变量是可以存取的,出了类,就不行了,比如说:
class Test
{
public:
    void pub_func(const Test& t);

private:
    void pri_func();
};

void Test::pub_func(const Test& t)
{
   t.pri_func(); //it's ok,in the class 
}

int main()
{
     Test t1,t2;
     t1.pub_func(t2);  //it's ok ,its public
     t1.pri_func();    //it's KO, :) (not ok) privated
     t2.pri_func();    //it's KO, private, in main()
func,not in the class Test

     return 1;
}



--- huangyi <huangyi12 at gmail.com>写道:

> Test::Test(const Test& t): m_pc(t.m_pc)
> {
> }
> 
> 楼主想说的是  t.m_pc  而不是前面那个m_pc 啊
> t可不是自家人啊  这个也可以访问么?
> 
> On 3/16/06, Oscar.Ken <oscar.ken at gmail.com> wrote:
> >
> >
>
顺便出个小题目,下面代码中哪几行不能通过编译?(仅供娱乐)
> > class Base
> > {
> > protected:
> >
> >  int _iProtected;
> >
> > private:
> >
> >  int _iPrivate;
> >
> > public:
> >
> >  void FooBase()
> >  {
> >   _iPrivate = 0;
> >  }
> > };
> >
> >
> >
>
//--------------------------------------------------------------------------------------
> >
> > class ProtectedB : protected Base
> > {
> > public:
> >
> >  void Foo()
> >  {
> >   _iPrivate = 0;
> >   _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();
> >  protectedB.FooBase();
> >
> >  return 0;
> > }
> >
> >
> > 在06-3-16,Oscar. Ken <oscar.ken at gmail.com> 写道:
> >
> > > 自家人不识自家人,合理吗?
> > >
> > > 在06-3-16,Fei Xu <flyingxu at gmail.com> 写道:
> > > >
> > > > 也许可以这样理解
> > > > protected, private都是对于class,而不是object
> > > >
> > > > On 3/16/06, Qiao Jie <
> analystqiao at hotmail.com> wrote:
> > > > > 这个是对标准的误解。
> > > > >
>
Test类的成员函数当然具有对Test类成员的完全访问权限,这个跟类型相关,而跟你是
> > > > >
>
用指针访问还是引用访问是用this指针还是其他名字的指针没有任何关系。你在Test函
> > > > >
> 数里用m_pc的时候,其实是隐含使用了this->m_pc。
> > > > >
> > > > >
> > > > > >From: Xiao Guo Li <lxgbrian at yahoo.com.cn>
> > > > > >Reply-To: C++ Discuss Group <
> cpp at codingnow.com>
> > > > > >To: C++ Discuss Group < cpp at codingnow.com>
> > > > > >Subject: [cpp] 问一个关于拷贝构造函数的问题
> > > > > >Date: Thu, 16 Mar 2006 16:36:29 +0800 (CST)
> > > > > >
> > > > > >大家看看,下面的代码有什么问题没有,
> > > > > >class Test{
> > > > > >public:
> > > > > >   Test();
> > > > > >   Test(const Test& t);
> > > > > >private:
> > > > > >   char * m_pc;
> > > > > >};
> > > > > >
> > > > > >Test::Test(const Test& t): m_pc(t.m_pc)
> > > > > >{
> > > > > >}
> > > > > >
> > > > > >...
> > > > > >问题是,这样写没有问题,但按照理解,
> > > > >
> >m_pc是类Test的私有变量,t.m_pc这种写法是不允许的。
> > > > > >
> > > > > >哪位DX给解释一下?
> > > > > >
> > > > >
> > > > >
> > > > >
> _______________________________________________
> > > > > Cpp mailing list
> > > > > Cpp at codingnow.com
> > > > > http://codingnow.com/mailman/listinfo/cpp
> > > > >
> > > >
> > > >
> > > > --
> > > > Fei Xu
> > > > Shanghai, China
> > > >
> > > >
> _______________________________________________
> > > > Cpp mailing list
> > > > Cpp at codingnow.com
> > > > http://codingnow.com/mailman/listinfo/cpp
> > > >
> > >
> > >
> >
> > _______________________________________________
> > Cpp mailing list
> > Cpp at codingnow.com
> > http://codingnow.com/mailman/listinfo/cpp
> >
> >
> 
> 
> --
> http://codeplayer.blogbus.com
> > _______________________________________________
> Cpp mailing list
> Cpp at codingnow.com
> http://codingnow.com/mailman/listinfo/cpp
> 



		
___________________________________________________________
 
情人节,用雅虎邮箱送玫瑰! 



More information about the Cpp mailing list