关于私有访问权限的有关问题(急)
关于私有访问权限的问题(急)
代码如下:
template<class T>
class MyClass{
private:
T value;
public:
template<class X>
void assign(const MyClass<X> & x){
value=x.getValue();
}
T getValue()const{
return value;
}
...
};
问题是:为什么assign()的参数x不能直接访问其私有数据成员,要通过getValue()函数来访问呢?
反而以下代码可以直接访问
代码如下:
template <class T>
class MyClass{
private:
T value;
public:
void assign(const MyClass<X>& x){
value=x.value;
}
};
我才刚学C++,突然遇到这个问题了,其实以前复制控制函数一直这样写,我也没有注意,汗,请高手解释一下,不甚感激
------解决方案--------------------
楼主用的是什么编译器啊
我用的VS2005
------解决方案--------------------
x与this不是同一个东东啊,当然不能访问了。
------解决方案--------------------
...
这里的MyClass<int>和MyClass<double> 不是同一种类型了
编译器实际上是生了一个class MyClass_Int{};的类 和一个class MyClass_Double{};的类
这样确实不行
------解决方案--------------------
VC 6.0 没啥子问题
代码如下:
template<class T>
class MyClass{
private:
T value;
public:
template<class X>
void assign(const MyClass<X> & x){
value=x.getValue();
}
T getValue()const{
return value;
}
...
};
问题是:为什么assign()的参数x不能直接访问其私有数据成员,要通过getValue()函数来访问呢?
反而以下代码可以直接访问
代码如下:
template <class T>
class MyClass{
private:
T value;
public:
void assign(const MyClass<X>& x){
value=x.value;
}
};
我才刚学C++,突然遇到这个问题了,其实以前复制控制函数一直这样写,我也没有注意,汗,请高手解释一下,不甚感激
------解决方案--------------------
楼主用的是什么编译器啊
我用的VS2005
template<class T>
class MyClass{
private:
T value;
public:
template<class X>
void assign(const MyClass<X> & x){
value=x.getValue();
}
T getValue()const{
return value;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClass<int> a;
MyClass<int> b;
a.assign(b); //编译通过
}
------解决方案--------------------
x与this不是同一个东东啊,当然不能访问了。
------解决方案--------------------
...
这里的MyClass<int>和MyClass<double> 不是同一种类型了
编译器实际上是生了一个class MyClass_Int{};的类 和一个class MyClass_Double{};的类
这样确实不行
------解决方案--------------------
VC 6.0 没啥子问题
#include <iostream>
using namespace std;
template<class T>
class MyClass{
private:
T value;
public:
MyClass(){}
MyClass(T i):value(i){}
template<class X>
void assign(const MyClass<X>& x){
this->value=x.value;
}
};
int main(){
MyClass<int> a ;
MyClass<int> b ;
a.assign(b);
return 0;
}