"C++泛型"弄不懂
时间:2011-12-27
来源:互联网
我刚学C++的泛型,看的是C++标准程序库,书中有一个例子,如下:
1 #include <iostream>
2 using namespace std;
3
4 template <class T>
5 class MyClass {
6 public:
7 MyClass(T t = 0) : value(t) {}
8 template <class X>
9 void assign(const MyClass<X>& x) { // allows different template
10 value = x.value;//x.getValue(); // 问题在这...
11 }
12 T getValue() const { // MyClass<T> is assignable
13 return value;
14 }
15 private:
16 T value;
17 };
void f() {
MyClass<double> d(1.0);
MyClass<int> i(2);
d.assign(d);
cout << d.getValue() << endl;
d.assign(i);
cout << d.getValue() << endl;
}
int main() {
f();
return 0;
}
问题:
在assign方法中,如何使用:value = x.value;为什么会出现
d:\KuaiPan\Codes\cclib\02>g++ MemTmpt.cc -o MemTmpt
MemTmpt.cc: In member function 'void MyClass<T>::assign(const MyClass<X>&) [with
X = int, T = double]':
MemTmpt.cc:24:13: instantiated from here
MemTmpt.cc:16:5: error: 'int MyClass<int>::value' is private
MemTmpt.cc:10:5: error: within this context
为什么value是private,会导致出错??《C++标准程序库》说是assign()的参数x和*this的型别不相同,不能直接存取MyClass<>的private成员和protected 成员,但是可以使用getValue()。
通过编译器提示信息,X的参数化发生在13行,为什么在assign调用过程中就推测出x的型别,而是推迟到getValue时候才将X参数化?我想明白C++是如何考虑这个问题???希望各位大牛解释解释...
1 #include <iostream>
2 using namespace std;
3
4 template <class T>
5 class MyClass {
6 public:
7 MyClass(T t = 0) : value(t) {}
8 template <class X>
9 void assign(const MyClass<X>& x) { // allows different template
10 value = x.value;//x.getValue(); // 问题在这...
11 }
12 T getValue() const { // MyClass<T> is assignable
13 return value;
14 }
15 private:
16 T value;
17 };
void f() {
MyClass<double> d(1.0);
MyClass<int> i(2);
d.assign(d);
cout << d.getValue() << endl;
d.assign(i);
cout << d.getValue() << endl;
}
int main() {
f();
return 0;
}
问题:
在assign方法中,如何使用:value = x.value;为什么会出现
d:\KuaiPan\Codes\cclib\02>g++ MemTmpt.cc -o MemTmpt
MemTmpt.cc: In member function 'void MyClass<T>::assign(const MyClass<X>&) [with
X = int, T = double]':
MemTmpt.cc:24:13: instantiated from here
MemTmpt.cc:16:5: error: 'int MyClass<int>::value' is private
MemTmpt.cc:10:5: error: within this context
为什么value是private,会导致出错??《C++标准程序库》说是assign()的参数x和*this的型别不相同,不能直接存取MyClass<>的private成员和protected 成员,但是可以使用getValue()。
通过编译器提示信息,X的参数化发生在13行,为什么在assign调用过程中就推测出x的型别,而是推迟到getValue时候才将X参数化?我想明白C++是如何考虑这个问题???希望各位大牛解释解释...
作者: halonar 发布时间: 2011-12-27
d.assign(i);这句不行
作者: qscool1987 发布时间: 2011-12-27
通过编译器提示信息,X的参数化发生在13行,为什么在assign调用过程中就推测出x的型别,而是推迟到getValue时候才将X参数化?我想明白C++是如何考虑这个问题???希望各位大牛解释解释...
================
不知道你要问什么....
================
不知道你要问什么....
作者: mingliang1212 发布时间: 2011-12-27
晕倒,刚刚的回复竟然没有响应。你这问题大概是访问对象私有成员引起的。MyClass<int>和MyClass<double>是不同的类,你在A类的成员函数里当然是不能访问B类对象的私有成员了。
作者: pengjialaosan 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28