回复: 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