1. 程式人生 > >case5:繼承和派生的作用舉例_2.0版本(使用繼承)

case5:繼承和派生的作用舉例_2.0版本(使用繼承)

格局上一次的討論:將繼承和派生後的寫如下:

(1)main.cpp

/************************************************************************
* Object-Oriented Programming C++        
* @title School 1.0
* @author Haoaowei
*Email:[email protected]
*
************************************************************************/

#include "teacher.h"
#include "student.h"

int main()
{
	Teacher ta("TA");   //呼叫Teacher類
	Teacher tb("TB");
	Student s1("S1",2005); //初始化類Student
	Student s2("S2",2006);

	ta.teach("C++");   //類Teacher中的成員函式
	tb.teach("英語");

	s1.learn("C++");   //學生學習
    s2.learn("英語");

	tb.talk(ta,"請你吃飯去啊");   //老師類之間的通訊
	ta.talk(tb,"好啊");
	s2.talk(s1,"我想去");        //學生類之間的通訊
	s1.talk(s2,"我也想去");

	ta.talk(s1,"一起去吧");    //通過函式的過載實現
	tb.talk(s2,"你先回家做作業");

	ta.eat("包子");   //類Teacher中的成員函式
	tb.eat("餃子");
	s1.eat("豆漿");//類Student中的成員函式

	s2.doHomework("英語");  //類Student的函式
	
	return 0;
}

(2.1)person.h

#ifndef PERSON_H_INCLUDED
#define  PERSON_H_INCLUDED

#include "string"
using std::string;
class Person
{
public:
	Person( string name); //建構函式
	virtual ~Person(){};//解構函式
	//成員函式
	string getName() const { return name;}  //類外獲取私有成員
	void talk(Person S,string stm);
	void eat(string food);
private:
	string name;
	
};

#endif

(2.2) person.cpp

#include "person.h"
#include "iostream"
using namespace std;
using std::string;

Person::Person( string name="hao"):name(name){} //建構函式{}

void Person::talk(Person S,string stm)
{
	cout<<name<<"對 " << S.name << "說: "<< stm <<endl;
}

void Person::eat(string food)
{
	cout<<name<< "吃: "<< food <<endl;

}

(3.1) student.h

#ifndef STUDENT_H_INCLUDED
#define  STUDENT_H_INCLUDED

#include "person.h"
#include "string"
using std::string;
class Student: public Person
{
public:
	Student( string name="hao",int grade=2011); //建構函式
	~Student(){};//解構函式
	//成員函式

    void learn(string course);
	void doHomework(string course);
private:
	int grade;
};

#endif

(3.2) student.cpp

#include "student.h"
#include "iostream"
using namespace std;
Student::Student( string name,int grade):Person(name),grade(grade) {}//建構函式

void Student::learn(string course) //成員函式,老師教
{
	cout<<grade<<"級學生"<<getName()<<"學習"<<course <<endl;

}

void Student::doHomework(string course)
{
	cout <<"學生"<<Person::getName()<<"做"<<course <<endl;

}

(4.1) teacher.h

#ifndef TEACHER_H_INCLUDED
#define  TEACHER_H_INCLUDED

#include "person.h"
#include "string"
using std::string;
class Teacher:public Person
{
public:
	Teacher( string name); //建構函式
	~Teacher(){};//解構函式
	//成員函式
	void teach(string stm);
};

#endif

(4.2) teacher.cpp

#include "teacher.h"
#include "iostream"
using namespace std;

Teacher::Teacher( string name):Person(name) {} //建構函式

void Teacher::teach(string stm) //成員函式,老師教
{
	cout<<"教師"<<getName() <<"教"<<stm <<endl;

}

執行結果: