您的位置:首页 > 其它

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*”的两行警告,但是没有编译错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐