网易云课堂_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]要求完全相同. 如果 ...
随机推荐
- DBA 经典面试题(3)
这里的回答并不是十分全面,这些问题可以通过多个角度来进行解释,也许你不必在面试过程中给出完全详尽的答案,只需要通过你的解答使面试考官了解你对ORACLE概念的熟悉程度. 1.解释冷备份和热备份的不 ...
- AsyncTask实现下载图片
实现效果: /*采用异步任务 AsyncTask<String,Integer, byte[]> * 参数一代表 执行异步任务时传递的参数的类型 * 参数二 如果不采用进度,则填Vo ...
- Windows Live Writer 代码插件改造
源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...
- 用Less循环生成样式
需求是这样的,我要给一个轮播图设置不同的背景图,由于每张图片的背景图路劲都不一样,所以需要对每个单独的元素自定义图片路径.然后想到Less语法有mixin机制,就这样实现了一个递归function,然 ...
- js中取session的值
在js中貌似不能取session的值,我在后台设置的session一直拿不到,于是用间接的方式拿到session的值. 首先在jsp中嵌入java代码,用java设置一个变量来取session值,再在 ...
- [Spring入门学习笔记][Spring Boot]
什么是Spring Boot Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...
- [HeadFirst-JSPServlet学习笔记][第二章:高层概述]
第二章:高层体系结构 容器 1 什么是容器? servelet没有main()方法.它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器.Web服 ...
- ResourceBundle读取中文properties文件问题
昨天遇到一个问题,用ResourceBundle读取中文字符串资源文件时,死活读不出来. 一开始以为是文件路径不对,后来发现如果默认properties文件时英文就没问题.我的项目代码是在src目录下 ...
- 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人
起源 “ 极客”一词,来自于美国俚语“ geek”的音译,一般理解为性格古怪的人.数学“极客”大多是指,并不 一定是数学专业但又对数学等技术有狂热的兴趣并投入大量时间钻研的人.又 译作“ 奇客”.以前 ...
- iOS UIWebView 访问https 绕过证书验证的方法
在文件开始实现 allowsAnyHTTPSCertificateForHost 方法 @implementation NSURLRequest (NSURLRequestWithIgnoreSSL ...