C++——一个简单的多文件具体例子

(From 九天雁翎)



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;
}

    在这里注意,和以前说的不同的是,类的被分开放在两个文件中,而且,类中的函数都在类定义外面定义,这里这样做是因为既然要封装,那么类的使用者就没有必要知道第2个文件,知道第一个文件就够了,只要你详细说明了每个函数的实际用途,类的使用者可以不关系他的具体实现,节省时间和精力。这是雷同于C中编写不同的函数的程序员之间也不需要实际了解那个函数具体怎么实现的一样,C就是这样实现结构化编程的,而C++就是通过这样写类,来实现面向对象编程的。在类外定义类的成员函数,你必须指明,这个函数是某个类的函数,通过符号“::”,在上面的例子中很明显。另外,所谓的 const成员函数,表示这个函数不能更改类中的数据,在声明及定义中都必须加上const.public下的东西可以公共访问,所以被叫做一个类的接口,什么叫接口?就是和外部产生联系所需要的东西。private下的别人就不需要了解了,叫封装,也是一种黑盒原理。可以看到,这里有2个接口函数,print(),input();其中print()有一个重载版本。还有1个重载的构造函数。看名字都很好理解。数据中就定义了一个由2个string组成的map。这里把类的定义放在一个单独的头文件里面,所以都用了std::而没有用using namespace std,因为头文件中最好不要用这个。其实在小程序中倒也无所谓。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值