博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之模板模式
阅读量:5323 次
发布时间:2019-06-14

本文共 1071 字,大约阅读时间需要 3 分钟。

    模板模式是《大话设计模式》中比较简单的模型,书中一个做试卷的例子进行分析。总结来说,就是对于同一份试卷,有多个不同的测试者,那么他们试卷上不同的只是答案(以及姓名),而实体及输出格式都是一致的。所以在父类的方法中可以把所有相同的实现都写好,答案只需要调用子类不同的虚方法。下面是我用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();但没有实现,而如果要想用子类的对象调用该方法会报错,因为编译器找不到子类中的定义!

转载于:https://www.cnblogs.com/sweet-coffee/p/4948455.html

你可能感兴趣的文章
SQL Server中利用正则表达式替换字符串
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>