//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的更多相关文章

  1. cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech

    cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech //纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要 ...

  2. C++学习基础十二——纯虚函数与抽象类

    一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...

  3. C++基础(纯虚函数与抽象类)

    C++基础之纯虚函数与抽象类 引言 纯虚函数在C++编程中的地位很重要,其关联到了设计模式中"接口"的概念. 语法 纯虚函数的语法: 1.  将成员函数声明为virtual 2.  ...

  4. C++:纯虚函数与抽象类

    5.4.3 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但是要求在派生类中根据需要对它进行定义,或仍然说明为纯虚函数. 声明纯虚函数的一般格式是: virtual 函数 ...

  5. c++,纯虚函数与抽象类

    1.纯虚函数的定义: (1)虚函数被“初始化”为0的函数.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列) =0;(2)纯虚函数没有函数体:(3)最后面的“=0”并不表示函数返回值 ...

  6. C++复习:纯虚函数和抽象类

    纯虚函数和抽象类 1基本概念 2抽象类案例   3抽象类在多继承中的应用 C++中没有Java中的接口概念,抽象类可以模拟Java中的接口类.(接口和协议) 3.1有关多继承的说明 工程上的多继承 被 ...

  7. 简单地说, cpp中的纯虚函数就是抽象类的具体实现

    简单地说, cpp中的纯虚函数就是抽象类的具体实现.包含了纯虚函数的类就是抽象类.

  8. C++基础 (7) 第七天 多态的原理 纯虚函数和抽象类 依赖倒置原则

    1 昨日回顾 2 多态的原理 1 要有继承 2 要有子类重写父类的虚函数 3 父类指针(或者引用)指向子类对象 (动态联编 虚函数表 3 证明vptr指针的存在 4 vptr指针在构造父类的时候是分步 ...

  9. c++-纯虚函数和抽象类

    纯虚函数和抽象类 C面向接口编程和C多态 函数类型语法基础 函数指针做函数参数(回调函数)思想剖析 函数指针做函数参数两种用法(正向调用.反向调用) 纯虚函数 抽象类 抽象类基本概念 抽象类在多继承中 ...

随机推荐

  1. tp隐藏入口文件

    [ Apache ] httpd.conf配置文件中加载了mod_rewrite.so模块 AllowOverride None 将None改为 All 把下面的内容保存为.htaccess文件放到应 ...

  2. tp5增删改查基本操作

    //插入数据 $res = Db::execute('insert into phptab(info) values("小张")'); dump($res); //修改数据 $re ...

  3. C# HttpClient 使用 Consul 发现服务

    试用了Overt.Core.Grpc, 把 GRPC 的使用改造得像 WCF, 性能测试也非常不错, 非常推荐各位使用. 但已有项目大多是 http 请求, 改造成 GRPC 的话, 工作量比较大, ...

  4. CF1340B Nastya and Scoreboard(暴搜剪枝/dp)

    Question 一个n个数码位的分数板,每一个数码位都是一个七段数码管,现在给出每个数码位的显示情况,问再点亮k段数码管的话能显示的最大的数是多少,如果不能构成一串数字,就输出-1 Solution ...

  5. PowerDesigner使用教程(一)

    一.PowerDesigner简介 PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据 ...

  6. Python操作Word与Excel并打包

    安装模块 # Word操作库 pip install docx # Excel操作库 pip install openpyxl # 打包exe工具 pip install pyinstaller Wo ...

  7. Django ListView DetailView等基于类的视图如何添加装饰器?

    场景: Django开发中,如果我们使用了类视图,如:ListView.DetailView.UpdateView等,这时我们又想要对这个视图添加一个装饰器,来实现某种功能,这时候该怎么处理呢? 环境 ...

  8. 【转】最长公共子序列(LCS),求LCS长度和打印输出LCS

    求LCS的长度,Java版本: public static int LCS(int[]a,int[] b) { int [][]c=new int[a.length+1][b.length+1]; f ...

  9. Java实现蓝桥杯 算法提高 八皇后 改

    **算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...

  10. Java实现 蓝桥杯 算法提高 分解质因数(暴力)

    试题 算法提高 分解质因数 问题描述 给定一个正整数n,尝试对其分解质因数 输入格式 仅一行,一个正整数,表示待分解的质因数 输出格式 仅一行,从小到大依次输出其质因数,相邻的数用空格隔开 样例输入 ...