cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech
//32dk2j_cpp_纯虚函数与抽象类cc32a_demo-txwtech
//纯虚函数是用来继承用的
//纯虚函数
//抽象类-抽象数据类型
//*任何包含一个或者多个纯虚函数的类都是抽象类
//*不要/不能创建这个类的对象,应该/只能继承它
//*务必覆盖从这个类继承的纯虚函数
//实现纯虚函数-----------可写可以不写
//C++接口
//就是只包含纯虚函数的抽象基类
//32dk2j_cpp_纯虚函数与抽象类cc32a_demo-txwtech
//纯虚函数是用来继承用的
//纯虚函数
//抽象类-抽象数据类型
//*任何包含一个或者多个纯虚函数的类都是抽象类
//*不要/不能创建这个类的对象,应该/只能继承它
//*务必覆盖从这个类继承的纯虚函数
//实现纯虚函数-----------可写可以不写
//C++接口
//就是只包含纯虚函数的抽象基类
#include <iostream>
using namespace std; class Shape//老子--//包含一个或者多个纯虚函数的类就是抽象类
{
public:
Shape()
{}
virtual ~Shape() {}
virtual double GetArea()=;//纯虚函数
virtual double GetPerim()=;//纯虚函数
//virtual void Draw() {}
virtual void Draw() = ;//=0就是纯虚函数
};
////纯虚函数可以写,一般不写
//void Shape::Draw() //这个就是实现 这个纯虚函数
//{
// cout << "...";
//}
class Circle :public Shape//儿子
{
//没有覆盖纯虚函数,还是抽象类
//如下覆盖的操作
public:
Circle(int radius) :itsRadius(radius) {}//构造函数
//析构函数-//因为GetArea() 与GetPerim()是继承来的,所以还是虚函数
//只要类里面有一个虚函数,那么析构函数也需要做成虚的,不然要出错
virtual ~Circle() {}
//三个纯虚函数重写后,就不是虚的了。
double GetArea()
{
return 3.14*itsRadius*itsRadius;
}
double GetPerim()
{
return * 3.14*itsRadius;
}
void Draw();
private:
int itsRadius;
};
void Circle::Draw()
{
cout << "circle drawing routine" << endl;
Shape::Draw();//调用基类的纯虚函数
}
class Rectangle :public Shape//儿子
{
public:
Rectangle(int len,int width):itsWidth(width),itsLength(len) {}
virtual ~Rectangle() {}
double GetArea() { return itsLength * itsWidth; }
double GetPerim() { return * itsWidth + * itsLength; }
virtual int GetLength() { return itsLength; }
virtual int GetWidth() { return itsWidth; }
void Draw();
private:
int itsWidth;
int itsLength; };
void Rectangle::Draw()
{
for (int i = ; i < itsLength; i++)
{
for (int j = ; j < itsWidth; j++)
{
cout << "x"; //<< endl;
}
cout << endl; }
Shape::Draw();//调用基类的纯虚函数
}
class Square :public Rectangle //孙子
{
public:
Square(int len);
Square(int len,int width);
virtual ~Square() {};
double getPerim() { return * GetLength(); } };
Square::Square(int len) :Rectangle(len, len) {}
Square::Square(int len, int width) : Rectangle(len, width)
{
if (GetLength() != GetWidth())
cout << "Error,not a square...a rectangle???" << endl;
} int main()
{
Circle a();
a.Draw();
Rectangle b(,);
b.Draw();
Square c();
c.Draw(); int choice;
bool fQuit = false;
Shape *sp=nullptr;//一个指向基类的指针可以指向它的派生类,指向它的子子孙孙
//C++的特性
//Shape *sp; //vs2017中必须初始化指针 while (fQuit == false)
{
cout << "(1)circle (2)Rectangle (3)Square (0)Quit:";
cin >> choice;
switch (choice)
{
case :
sp = new Circle();//指针必须使用new创建对象
break;
case :
sp = new Rectangle(, );
break;
case :
sp = new Square();
break;
case :
fQuit = true;
break; /*default:
break;*/
}
if (fQuit == false)
{
sp->Draw();
delete sp;
cout << endl;
} } getchar();
return ;
}
cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech的更多相关文章
- cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech
cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech //纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要 ...
- C++学习基础十二——纯虚函数与抽象类
一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...
- C++基础(纯虚函数与抽象类)
C++基础之纯虚函数与抽象类 引言 纯虚函数在C++编程中的地位很重要,其关联到了设计模式中"接口"的概念. 语法 纯虚函数的语法: 1. 将成员函数声明为virtual 2. ...
- C++:纯虚函数与抽象类
5.4.3 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但是要求在派生类中根据需要对它进行定义,或仍然说明为纯虚函数. 声明纯虚函数的一般格式是: virtual 函数 ...
- c++,纯虚函数与抽象类
1.纯虚函数的定义: (1)虚函数被“初始化”为0的函数.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列) =0;(2)纯虚函数没有函数体:(3)最后面的“=0”并不表示函数返回值 ...
- C++复习:纯虚函数和抽象类
纯虚函数和抽象类 1基本概念 2抽象类案例 3抽象类在多继承中的应用 C++中没有Java中的接口概念,抽象类可以模拟Java中的接口类.(接口和协议) 3.1有关多继承的说明 工程上的多继承 被 ...
- 简单地说, cpp中的纯虚函数就是抽象类的具体实现
简单地说, cpp中的纯虚函数就是抽象类的具体实现.包含了纯虚函数的类就是抽象类.
- C++基础 (7) 第七天 多态的原理 纯虚函数和抽象类 依赖倒置原则
1 昨日回顾 2 多态的原理 1 要有继承 2 要有子类重写父类的虚函数 3 父类指针(或者引用)指向子类对象 (动态联编 虚函数表 3 证明vptr指针的存在 4 vptr指针在构造父类的时候是分步 ...
- c++-纯虚函数和抽象类
纯虚函数和抽象类 C面向接口编程和C多态 函数类型语法基础 函数指针做函数参数(回调函数)思想剖析 函数指针做函数参数两种用法(正向调用.反向调用) 纯虚函数 抽象类 抽象类基本概念 抽象类在多继承中 ...
随机推荐
- uni-app运行到浏览器跨域H5页面的跨域问题解决方案
官方文档对跨域的解决方案推荐: https://ask.dcloud.net.cn/article/35267 更方便的解决方案 项目根目录直接创建一个vue.config.js文件,并在里面配置代理 ...
- 【JUC】synchronizated和lock的区别&新lock的优势
原始构成 synchronized是关键字,属于JVM层面 javap -c 的结果显示 synchronized是可重入锁 11:是正常退出 17:是异常退出[保证不产生死锁和底层故障] Lock是 ...
- MOS管的栅极和源极之间的电阻
MOS管的栅极和源极之间的电阻: 一是为场效应管提供偏置电压:二是起到泻放电阻的作用:保护栅极G-源极S: 保护栅极G-源极S: 场效应管的G-S极间的电阻值是很大的,这样只要有少量的静电就能使他的G ...
- 读Pyqt4教程,带你入门Pyqt4 _006
窗口组件是应用程序的基本构建块.PyQt4编程工具包拥有范围广泛的各种窗口组件.按钮.选择框.滑块.列表框等等,程序员工作所需要的一切.在教程的这部分中,我们将介绍一些有用的窗口组件. QCheckB ...
- String类的内存解析
package com.aff.equals; public class TestString { public static void main(String[] args) { String st ...
- 浅谈SIEM
一.概念 SIEM ( Security Information Event Management,安全信息与事件管理) Gartner的定义:安全信息和事件管理(SIEM)技术通过对来自各种事件和上 ...
- C语言 俄罗斯方块demo
这是我的第一篇随笔,当然是发我写的第一个游戏啦! 大一(本人现在大二)寒假过完年,在家待着想起放假前计划写一个游戏的,因为本人立志走游戏开发这条路,加上大一上册学了C语言,就想写个游戏练练手.想了很久 ...
- winxp无法访问win10教育版共享资源的问题处理
一.问题来源: dell5460笔记本上一个winxp系统虚拟机,访问一台lenovoT470笔记本win10教育版系统上的共享资源(使用命令行方式:net use s: \\172.18.45.10 ...
- Java实现 LeetCode 749 隔离病毒(DFS嵌套)
749. 隔离病毒 病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒. 假设世界由二维矩阵组成,0 表示该区域未感染病毒,而 1 表示该区域已感染病毒.可以在任意 2 个四方向相邻单元之 ...
- Java实现 蓝桥杯VIP 算法提高 乘法运算
算法提高 乘法运算 时间限制:1.0s 内存限制:512.0MB 问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格 ...