自动类型转换对于任一含有字符串的类是非常有帮助的
两个不用自动类型转换就想从标准的C库函数中使用所有的字符串函数,那么就得
为每一个函数写一个对应的成员函数
//: C12:Strings1.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// No auto type conversion
#include "../require.h"
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
class Stringc {
string s;
public:
Stringc(const string& str = "") : s(str) {}
int strcmp(const Stringc& S) const {
return ::strcmp(s.c_str(), S.s.c_str());
}
// ... etc., for every function in string.h
};
int main() {
Stringc s1("hello"), s2("there");
s1.strcmp(s2);
} ///:~
写了一个strcmp()函数,必须为可能需要的 <cstring>中的每一个写一个
相应的函数
无输出
可以提供一个允许访问<cstring>中使用函数的自动类型转换
//: C12:Strings2.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// With auto type conversion
#include "../require.h"
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
class Stringc {
string s;
public:
Stringc(const string& str = "") : s(str) {}
operator const char*() const {
return s.c_str();
}
};
int main() {
Stringc s1("hello"), s2("there");
strcmp(s1, s2); // Standard C function
strspn(s1, s2); // Any string function!
} ///:~
因为编译器知道如何从String c转换到char*,所以现在如何一个接受char*
参数的函数也可以接受Stringc参数
无输出