1 person.h
#ifndef PERSON_H
#define PERSON_H
#include<string>
#include<iostream>
using namespace std;
namespace stdperson
{
class Person
{
public:
Person();
Person(string name, int age);
void SetName(string name);
void SetAge(int age);
string GetName();
int GetAge();
private:
string name;
int age;
};
}
#endif
2 person.cpp
#include "person.h"
using namespace stdperson;
stdperson::Person::Person()
{
SetName("A");
SetAge(0);
}
//------------------------------------------------------------------------
stdperson::Person::Person(std::string name, int age)
{
SetName(name);
SetAge(age);
}
//------------------------------------------------------------------------
void stdperson::Person::SetName(std::string name)
{
this->name = name;
}
//------------------------------------------------------------------------
void stdperson::Person::SetAge(int age)
{
this->age = age;
}
//------------------------------------------------------------------------
string stdperson::Person::GetName()
{
return this->name;
}
//------------------------------------------------------------------------
int stdperson::Person::GetAge()
{
return age;
}
//------------------------------------------------------------------------
3 onemethod.h
#ifndef ONEMETHOD_H
#define ONEMETHOD_H
#include "person.h"
namespace stdperson
{
void PrintMessage(Person p);
}
#endif
4 onemethod.cpp
#include "onemethod.h"
using namespace stdperson;
void stdperson::PrintMessage(Person p)
{
{
cout<<"*********************************"<<endl;
cout<<p.GetName()<<endl;
cout<<p.GetAge()<<endl;
cout<<"********************************"<<endl;
}
}
5 main.cpp
#include "person.h"
#include "onemethod.h"
using namespace stdperson;
int main()
{
Person p("dd", 12);
cout<<p.GetName()<<endl;
cout<<p.GetAge()<<endl;
PrintMessage(p); //条款23 宁以non-member函数代替member函数
system("pause");
return 0;
}
//-------------------------------------------------------------------------------------------------------------
尽量使用pass by reference,当然啦pass by reference to const就更好了
#ifndef OTHERMETHOD_H
#define OTHERMETHOD_H
#include "person.h"
namespace stdperson
{
void PrintOther(Person p);
}
#endif
#include "othermethod.h"
namespace stdperson
{
void PrintOther(Person p)
{
cout<<"***************PrintOther*******************"<<endl;
cout<<p.GetName()<<endl;
cout<<p.GetAge()<<endl;
cout<<"********************************************"<<endl;
}
}
如果有一个子类继承了Person,并且Person中的GetName()和GetAge()方法都是virtual的,如果上主函数上如此这般调用,会产生截断的恶果。一直调用的方法都是基类的GetName()和GetAge();要想调用的是子类的GetName()和GetAge()方法,有两种方法,一种是将PrintOther的参数改成指针,另外一种方法就是将参数改成Person &p,改成pass by reference或pass by reference to const