MOOC清华《面向对象程序设计》第4章:类模板的特化实验
2017-08-27 18:56
344 查看
#include <iostream> #include <cstring> #include <string> using namespace std; template <typename T> class Sum{ T a, b; public: Sum(T op1, T op2): a(op1), b(op2){} T DoIt() {return a + b;} }; template<> class Sum<char*>{ char *str1, *str2; public: Sum(char* s1, char* s2): str1(s1), str2(s2){} char* DoIt(){ char* tmp = new char[strlen(str1) + strlen(str2) + 1]; strcpy(tmp, str1); strcat(tmp, str2); return tmp; } }; int main(){ Sum<int> obj1(3, 4); cout << obj1.DoIt() << endl; char *s1 = "Hello, ", *s2 = "THU"; Sum<char*> obj2(s1, s2); cout << obj2.DoIt() << endl; return 0; }
在调试这个程序的过程中,我发现一味地把char*换成string并不可行,毕竟char*是指针、是地址,而string是一个串。这也许就是C++为什么是提倡不用,而不是彻底禁止char*的原因吧。一样会有“建议弃用char*”的两行警告,但是没有编译错误。
相关文章推荐
- MOOC清华《面向对象程序设计》第4章:函数模板的特化实验
- MOOC清华《面向对象程序设计》第4章:函数模板实验
- MOOC清华《面向对象程序设计》第4章:基类与派生类的继承权限实验
- MOOC清华《面向对象程序设计》第4章:函数重写实验
- MOOC清华《面向对象程序设计》第4章:向上映射实验
- MOOC清华《面向对象程序设计》第4章:虚函数实验
- MOOC清华《面向对象程序设计》第4章:虚析构函数实验
- MOOC清华《面向对象程序设计》第4章:delete禁止自动类型转换实验
- MOOC清华《面向对象程序设计》第2章:函数重载实验
- MOOC清华《面向对象程序设计》第8章:装饰模式实验
- MOOC清华《面向对象程序设计》第3章:拷贝构造函数实验
- MOOC清华《面向对象程序设计》第3章:前缀/后缀运算符重载实验
- MOOC清华《面向对象程序设计》第7章:负载监视器的设计v2.0(采用基于模板的策略模式)
- MOOC清华《面向对象程序设计》第3章:下标运算符重载实验
- MOOC清华《面向对象程序设计》第3章:const常量成员实验
- MOOC清华《面向对象程序设计》第3章:流运算符重载实验
- MOOC清华《面向对象程序设计》第4章:继承基类构造函数实验
- MOOC清华《面向对象程序设计》第4章:自动类型转换实验
- MOOC清华《面向对象程序设计》第8章:悬挂指针实验
- MOOC清华《面向对象程序设计》第3章:对象组合实验