符号重载是C++实现类对象间基本操作的一个基本方式。
重载,运算符不是很常见,以此例说明:
#include <iostream>
#include <string>
class Person{
int _id;
std::string _name;
unsigned int _age;
public:
explicit Person(int id): _id(id){
}
Person(std::string name, unsigned int age):_id(0), _name(name), _age(age){
}
std::string toString(){
char strAge[10];
sprintf(strAge, "Age:\t%d", _age);
std::string res("Name:\t");
res.append(_name);
res += "\n";
res.append(strAge);
res += "\n";
return res;
}
/// set person age.
/// return the reference to self.
Person& operator, (unsigned int age){
_age = age;
return *this;
}
/// set person name.
/// note that the return value is the instance self.
Person& operator, (std::string name){
_name = name;
return *this;
}
};
/// The resposibility of Nuwa class is to create Person through operator << () method
class Nuwa{
public:
// return a person.
Person operator << (unsigned int id){
return Person(id);
}
};
int main(int argc, char** argv){
Nuwa nuwa;
std::cout << (nuwa<<1, "Eric", 23).toString().c_str() << std::endl; //Name: Eric Age: 23
return 0;
}
代码说明:
Nuwa类重载输出流运算符<<,返回Person对象
Preson类重载,运算符号,返回Person对象引用
nuwa<<1, "Eric", 23
首先调用<<,再循环调用,最后输出结果