首页 > 其他 > 详细

设计模式之模板模式

时间:2015-11-08 22:21:42      阅读:221      评论:0      收藏:0      [点我收藏+]

    模板模式是《大话设计模式》中比较简单的模型,书中一个做试卷的例子进行分析。总结来说,就是对于同一份试卷,有多个不同的测试者,那么他们试卷上不同的只是答案(以及姓名),而实体及输出格式都是一致的。所以在父类的方法中可以把所有相同的实现都写好,答案只需要调用子类不同的虚方法。下面是我用C++进行了实现。 

#include <iostream>

using namespace std;

class Test

{

public:

    void makeTest1();

    virtual string getAnswer();

};

        

void Test::makeTest1()

{

    cout<<"who is more beautiful?"<<endl;

    cout<<"ans:  "<<getAnswer()<<endl;

}

 

string Test::getAnswer()

{

    return "";

}

 

class TestA:public Test

{

public:

    virtual string getAnswer();

};

 

string TestA::getAnswer()

{

    return "A";

}

 

class TestB : public Test

{

public:

  //  void makeTest1(); 不能写

    virtual string getAnswer();

};

 

string TestB::getAnswer()

{

    return "B";

}

int main(int argc, const char * argv[]) {

    Test *t = new TestA();  //动态绑定,推迟到运行时

    t->makeTest1();

    t = new TestB();

    t->makeTest1();

    return 0;

}

 上面代码中的getAnswer方法是虚函数,这也是C++面试中经常会问的知识点,这里简单回顾和总结一下C++的虚函数要注意的几点:

1. 利用了动态绑定,Test *t = new TestA();而不能TestA *t = new TestA();因为用后者既没有利用面向对象的动态绑定思想。

2. 虚函数必须使用指针调用!

3. 如果在子类中加 void makeTest1();但没有实现,而如果要想用子类的对象调用该方法会报错,因为编译器找不到子类中的定义!

设计模式之模板模式

原文:http://www.cnblogs.com/sweet-coffee/p/4948455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!