case5:繼承和派生的作用舉例_2.0版本(使用繼承)
阿新 • • 發佈:2018-11-02
格局上一次的討論:將繼承和派生後的寫如下:
(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;
}
執行結果: