/*****************************************
Copyright (c) 2016 Jingshuang Hu
@filename:Class.h
@datetime:2016.09.16
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#ifndef _CLASS_H
#define _CLASS_H
// 抽象類:定義算法的框架,將一些步驟延遲到子類中去。
// 在不改變算法框架結構的情況下,進行代碼複用
class AbstractClass {
public:
virtual void run();
virtual void fun1() = 0;
virtual void fun2() = 0;
virtual void fun3() = 0;
};
// 具體類A:實現抽象類中的方法,完成具體算法
class concreteClassA : public AbstractClass {
virtual void fun1();
virtual void fun2();
virtual void fun3();
};
// 具體類B:實現抽象類中的方法,完成具體算法
class concreteClassB : public AbstractClass {
virtual void fun1();
virtual void fun2();
virtual void fun3();
};
#endif // _CLASS_H
/*****************************************
Copyright (c) 2016 Jingshuang Hu
@filename:Class.cpp
@datetime:2016.09.16
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#include "Class.h"
#include <iostream>
using namespace std;
void AbstractClass::run() {
this->fun1();
this->fun2();
this->fun3();
}
void AbstractClass::fun1() {
}
void AbstractClass::fun2() {
}
void AbstractClass::fun3() {
}
void concreteClassA::fun1() {
cout << "喫咖啡" << endl;
}
void concreteClassA::fun2() {
cout << "喫中。。。" << endl;
}
void concreteClassA::fun3() {
cout << "喫完了" << endl;
}
void concreteClassB::fun1() {
cout << "逛街" << endl;
}
void concreteClassB::fun2() {
cout << "逛中。。。" << endl;
}
void concreteClassB::fun3() {
cout << "逛完了" << endl;
}
/*****************************************
Copyright (c) 2016 Jingshuang Hu
@filename:main.cpp
@datetime:2016.09.16
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#include <iostream>
#include "Class.h"
using namespace std;
int main() {
AbstractClass* class1 = new concreteClassA();
class1->run();
AbstractClass* class2 = new concreteClassB();
class2->run();
system("pause");
return 0;
}