您的位置:首页 > 编程语言 > C语言/C++

关于c++访问权限的一点困惑

2013-07-10 12:59 239 查看
今天同学问我一个类似如余下的问题:

template<typename T>
class Queue
{
public:
Queue(int _age,string _name);//构造函数
Queue(const Queue & q);             //copy构造函数
void print();
private:
int age;
string name;
};
template <typename T>
Queue<T>::Queue(int _age, std::string _name):age(_age),name(_name)
{
cout<<"Run Constructor"<<endl;
}

template <typename T>
Queue<T>::Queue(const Queue & q)
{
this->age=q.age;
this->name=q.name;
}

template <typename T>
void Queue<T>::print()
{
cout<<"name:"<<this->name<<" ,age:"<<this->age<<endl;
}


他问:(1)为什么那个copy构造函数不是如下的:Queue(const Queue<T> & q);为什么可以省掉模版类型参数T?(2)copy构造函数的实现中为什么可以访问变量q的私有成员age和name?

(1)对于第一个问题,其实如果没有定义为[b]Queue(const Queue<T> & q)形式,编译器也会把[b]Queue(const Queue & q)扩展为[b]Queue(const Queue<T> & q)形式,也就是说这两种效果是一样的。[/b][/b][/b]

[b][b][b](2)对于第二个问题我开始也一愣,跟他有同感,为什么可以访问变量q的私有成员了.[/b][/b][/b]

[b][b][b] 其实我们通常所说的public,private,protected是相对类而言的,而不是相对对象而言的。及自己类可以访问自己类的所有成员(包括私有的)。因为q属于Queue<T>类 所以它(copy构造函数)可以访问q的所有成员。[/b][/b][/b]

[b][/b]
class Test
{
public:
void print(const Test & t)
{
cout<<t.num<<endl;
}
private:
int num;
};
上面的定义也是正确的.

[b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: