网易云课堂_C++开发入门到精通_章节6:多态
课时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;
}
网易云课堂_C++开发入门到精通_章节6:多态的更多相关文章
- 网易云课堂_C++开发入门到精通_章节7:模板
课时35类模板 类模板 创建类模板的实例 class Name<类型参数表>object; 类模板与模板类的区别 类模板是模板的定义,不是一个实实在在的类,定义中用到通用类型参数 模板类是 ...
- 网易云课堂_C++开发入门到精通_章节8:设计模式
课时44设计模式简介 设计模式简介 面向对象设计的第一个原则:针对接口编程,而不是针对实现编程 接口->指针 实现->实例 若已存在一个类Class A,现在希望复用Class A,则有以 ...
- 网易云课堂_C++开发入门到精通_章节4:运算符重载
课时23运算符重载 运算符重载 重载赋值运算符 Person& Person::operator=(const Person& other) { //检查自赋值 if (this == ...
- 网易云课堂_C++开发入门到精通_章节3: 类、对象和封装
课时12构造函数与析构函数-2 构造函数 构造函数可以有多个 构造函数可以重载 构造函数用于隐式类型转换 class Student { public: explicit Student(int ss ...
- 网易云课堂_C++开发入门到精通_章节2:引用和函数的高级用法
课时6函数重载 函数重载 在C语言头文件中的extern "C" //常见的C语言头文件格式 #ifndef _FUNC_ #define _FUNC_ #ifdef __cplu ...
- 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)
第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...
- 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)
第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回 提交作业(截止时间已过) 完成并提交作业 作业批改 互评训练 互评作业 自评作业 成绩公布 查看成绩 温 ...
- 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)
第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...
- 网易云课堂_C++程序设计入门(上)_第4单元:物以类聚 – 对象和类_第4单元作业【3】- 在线编程(难度:难)
1 在本单元作业[1]和作业[2]的基础上,创建一个MyRectangle类,并在main函数中创建类的实例.(10分) 题目难度: 难 题目内容: Screen类: 与作业[2]要求完全相同. 如果 ...
随机推荐
- 最长公共子串LCS(Longest Common Substring)
一.问题描述 寻求两个字符串中的最大公共字串,其中子串是指字符串中连续的字符组成的,而不是像子序列,按照字符的前后顺序组成.如str1="sgabacbadfgbacst",str ...
- maven报错cannot change version of project facet
用Eclipse创建Maven结构的web项目的时候选择了默认的catalog,由于这个catalog比较老,用的servlet还是2.3,而现在最少也是2.5,所以经常会出现问题,在Projecdt ...
- flex 调用WebService2(基于.net)
flex 访问WebService的方法有很多种,使用FLEX4中的"数据/服务"功能可以自动生成访问WebService的代理类,这样可以避免把所有的数据访问都写到MXML页面上 ...
- MJRefresh(上拉加载下拉刷新)
整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E ...
- TCP粘包/拆包问题的解决
TCP粘包拆包问题 一个完整的包可能被TCP拆分成多个包,或多个小包封装成一个大的数据包发送. 解决策略 消息定长,如果不够,空位补空格 在包尾增加回车换行符进行分割,例如FTP协议 将消息分为消息头 ...
- c++设计模式之状态模式
一. 状态模式 定义:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 实现方式1: workstate 状态抽象类 workstate1 状态实现类1 workstate2 ...
- 轻量级jquery框架之--工具栏(toolbar)
工具栏需求: (1)要求工具栏可以通过JSON配置格式生成,这样可以从服务器端控制生成的JSON来控制UI层面的按钮状态 (2)可以自定义按钮的图标样式. (3)可以定义按钮事件,按钮事件需要支持以字 ...
- 还是畅通工程(1233 并查集+kruskal)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- linux多线程编程之互斥锁
多线程并行运行,共享同一种互斥资源时,需要上互斥锁来运行,主要是用到pthread_mutex_lock函数和pthread_mutex_unlock函数对线程进行上锁和解锁 下面是一个例子: #in ...
- CSS3之背景色渐变
在css2时代,页面背景色渐变,按钮背景渐变效果主要是通过图片实现,css3中可通过 gradient 实现背景色渐变,图片作为一种资源,每次在页面加载时都要从服务器下载,这样如果页面很大需要渐变的效 ...