课时33示例--为多态基类声明虚析构函数

微软校园招聘笔试题

#include <iostream>

class Base
{
public:
char Value()
{
return 'A';
} virtual char VirtualValue()
{
return 'X';
}
}; class Derived :public Base
{
public:
char Value()
{
return 'U';
}
}; class VirtualDerived :virtual public Base
{
public:
char Value()
{
return 'Z';
} char VirtualValue()
{
return 'V';
}
}; int main()
{
Base *p1 = new Derived();
Base *p2 = new VirtualDerived(); std::cout << p1->Value() << " " <<
p1->VirtualValue() << " " <<
p2->Value() << " " <<
p2->VirtualValue() << std::endl; system("pause"); return 0;
}

A X A V
请按任意键继续. . .

课时34案例讲解--简单工厂

案例讲解

简单工厂

案例介绍

模拟种植园管理程序

种植园里种苹果、葡萄等水果

案例设计

使用简单工厂模式实现开闭原则

#include <iostream>

enum
{
APPLE = 0,
GRAPE = 1
}; class Fruit
{
public:
virtual ~Fruit() = 0; virtual void plant() = 0;
virtual void grow() = 0;
virtual void harvest() = 0;
}; class Apple :public Fruit
{
public:
Apple();
~Apple(); virtual void plant();
virtual void grow();
virtual void harvest();
}; class Grape :public Fruit
{
public:
Grape();
~Grape(); virtual void plant();
virtual void grow();
virtual void harvest();
}; class Gardener
{
public:
Gardener();
~Gardener(); Fruit* getFruit(int type); private:
Apple* apple;
Grape* grape;
}; Fruit::~Fruit()
{ } Apple::Apple()
{
std::cout << "apple constructing" << std::endl;
} Apple::~Apple()
{
std::cout << "apple destructing" << std::endl;
} void Apple::plant()
{
std::cout << "apple plant" << std::endl;
} void Apple::grow()
{
std::cout << "apple grow" << std::endl;
} void Apple::harvest()
{
std::cout << "apple harvest" << std::endl;
} Grape::Grape()
{
std::cout << "grape constructing" << std::endl;
} Grape::~Grape()
{
std::cout << "grape destructing" << std::endl;
} void Grape::plant()
{
std::cout << "grape plant" << std::endl;
} void Grape::grow()
{
std::cout << "grape grow" << std::endl;
} void Grape::harvest()
{
std::cout << "grape harvest" << std::endl;
} Gardener::Gardener()
{
apple = nullptr;
grape = nullptr;
} Gardener::~Gardener()
{ } Fruit* Gardener::getFruit(int type)
{
Fruit *fruit = nullptr; if (APPLE == type)
{
if (nullptr == apple)
{
apple = new Apple();
} fruit = apple;
}
else if (GRAPE == type)
{
if (nullptr == grape)
{
grape = new Grape();
} fruit = grape;
}
else
{ } return fruit;
} int main()
{
Gardener tom; Fruit* fruit = tom.getFruit(APPLE); fruit->plant();
fruit->grow();
fruit->harvest(); system("pause"); return 0;
}

最新文章

  1. java开发人员,最应该学习和熟练使用的工具类。google guava.(谷歌 瓜娃)
  2. SSIS Design6:利用数据流
  3. linux fdisk命令使用
  4. Maven搭建 Spring环境
  5. msql数据迁移,myisam及innoDB
  6. 带你走近AngularJS - 体验指令实例
  7. ZeroClipboard 复制到剪贴板
  8. 一点一滴之NHibernate
  9. 【转】C#中Invoke的用法
  10. Linux 查看端口占用并杀掉
  11. Java笔记(二十三)&hellip;&hellip;Map集合
  12. UIViewController的View显示在导航栏下面如何解决?
  13. [转] Ubuntu 12.04下LAMP安装配置 (Linux+Apache+Mysql+PHP)
  14. ios视图切换之push与present混用
  15. Sublime Text前端开发环境配置
  16. 利用C#转换图片格式及转换为ico
  17. img加载卡顿,解决办法
  18. TypeError: &#39;NoneType&#39; object is not subscriptable
  19. 解决方法:CentOS7用yum安装软件显示错误:cannot find a valid baseurl for repo: base/7/x86_64
  20. x264阅读记录-2

热门文章

  1. Windows Server 2008 R2 添加且制成“NFS服务器”角色后与Unix客户端匿名访问常见问题
  2. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul
  3. 小鼠迷宫问题【sdut1157】【dfs,bfs综合题目】
  4. hiho一下121周 后缀数组二&#183;重复旋律2
  5. eclipse中如何关闭运行时自动保存?
  6. 简单的谈一下.NET下的AOP
  7. 字符串copy
  8. php解决微信开发中用户昵称中的特殊字符与emoji表情写入mysql错误的问题
  9. zip &amp; tar 压缩文件时排除某个文件夹
  10. JavaSe:代码块执行顺序
  11. vue 控制视图
  12. 使用 SharpZipLib 打包数据到 ZIP 文件
  13. python 饥饿的小易(网易笔试题)
  14. 【分布式搜索引擎】Elasticsearch分布式架构原理
  15. Java对日期Date类进行日期加减运算,年份加减,月份加减
  16. 深入理解java虚拟机---虚拟机工具jinfo(十五)
  17. STP实验(指定特定交换机为根桥)
  18. JavaSE(二)之继承、封装、多态
  19. MyEclipse设置选中单词其它同名单词前景色和背景色
  20. 【Unity/SVN】使用SVN管理Unity项目