上一次讲了一些基本的概念,这次分析一个稍微复杂但其实还是很简单的例子。现看定义:
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,因为头文件中最好不要用这个。其实在小程序中倒也无所谓。
分享到:
相关推荐
warning: gcc-c++-4.4.7-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: gcc = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.x86_64 libstdc++ = 4.4.7-...
C语言代码和C++代码--vs2008从指针到多线程、文件读写、套接字 C: 阶乘 冒泡排序 数值转换 行指针、列指针 形状--打印菱形 指针做冒泡排序 6.5指针函数 6.7用指针显示二维数组 7.1文件操作 7.2文件信息提取 8指针...
一次作业 主要考察类 循环 还有条件判断
C++文件操作-图书馆管理系统:UML课程作业,采用Qt开发 C++文件操作-图书馆管理系统:UML课程作业,采用Qt开发 C++文件操作-图书馆管理系统:UML课程作业,采用Qt开发 C++文件操作-图书馆管理系统:UML课程作业,...
2011百度校园招聘笔试题 C++类-附原创答案.docx2011百度校园招聘笔试题 C++类-附原创答案.docx2011百度校园招聘笔试题 C++类-附原创答案.docx2011百度校园招聘笔试题 C++类-附原创答案.docx2011百度校园招聘笔试题 ...
浅谈C++容器.pdf 浅谈C++容器.pdf 浅谈C++容器.pdf 浅谈C++容器.pdf
gcc-c++-3.4.6-3.1.x86_64.rpm
gcc-c++-4.4.6-4.el6.x86_64.rpm
浅谈C++容器
c++类的运用的简单例子 people类
windows下c++版faster -rcnn
浅谈c++的精髓之继承和多态
gcc-c++-3.4.6-3.i386.rpm
简单的代码---求质因数 第2版质因数程序的代码 PS:呃呃呃呃呃呃呃 第一次发这个东东,不知道为什么要写50以上的子 过1个月就付费!!!! 太难了吖 不过资源是好的 c++资源 如果你是学c语言的把头文件改成 然后把cin改成...
C++ TCP-UDP传文件例子
c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--...
宽字节和多字节转换,利用C++实现UTF-8和UTF-16之间的转换,包括错误处理
c++常用的工具类源码 包括:文件处理,编码处理,字符串处理,网络爬虫,网页数据的抓取 ,可根据数组规则抓取指定网页的内容(有一个例子)等等
4、如果你下载了其中某一个压缩包,请你到我的空间找到其他两个压缩包,要3个压缩包都下载齐全,然后放到同一个文件夹下,点击解压part01.rar就可以全解压出来了。 以上,希望对需要《Visual C++程序开发-范例宝典...
本资源为C++实验1-13,包含完整程序、注释、报告非常适合初学者学习、研究,具体如下: 实验1-熟悉Visual C++编程环境 实验2-利用函数编程 实验3-指针与引用的编程 实验4-类与对象的编程 实验5-构造函数与析构函数的...