上一次讲了一些基本的概念,这次分析一个稍微复杂但其实还是很简单的例子。现看定义:
Person.h
#include <map>
#include <string>
class Person
{
public:
Person(const std::string &,const std::string &);
Person(){};
void print(const std::string &) const; //声明一个const成员函数输出
void print();
void input(const std::string &,const std::string &);
private:
std::map<std::string,std::string> aperson;
};
Person.cpp
#include "Person.h"
#include <iostream>
#include <iterator>
#include <algorithm>
Person::Person(const std::string &name,const std::string &adress) //一个构造函数
{
aperson[name] = adress;
}
void Person::print(const std::string &name) const //定义了一个const成员函数,输出
{
std::map<std::string,std::string>::const_iterator it = aperson.find(name);
//在aperson中查找key name
if(it != aperson.end()) //假如有就输出
{
std::cout<<it->first<<"'s adress is "<<it->second<<std::endl;
}
else
{
std::cout<<"there is no this person called"<<name<<std::endl;
}
}
void Person::print() //重载一个输出,没有参数就输出所有的值
{
for(std::map<std::string,std::string>::iterator it =aperson.begin();//遍历aperson
it != aperson.end();++it)
{
std::cout<<it->first<<" in "<<it->second<<std::endl;
}
}
void Person::input(const std::string &name, const std::string &adress)
//用input管理输入
{
aperson[name] = adress; //有就改名,没有就增加一个,利用map下标的特点
}
这个类使用的方法具体可以参考下面,你也可以自己试试:
#include "Person.h"
#include <string>
int main()
{
Person abook("jack","Guanzhou");
abook.input("jim","Beijing");
abook.input("tom","Hunan");
abook.print("jack");
return 0;
}