首页 > 其他分享 >33抽象类

33抽象类

时间:2024-01-25 17:11:45浏览次数:27  
标签:oil name 33 double Car 抽象类 public

抽象类

抽象类的初衷

  • 给出共性属性,让派生类通过继承直接复用这些属性
  • 给所有的派生类保留统一的覆盖/重写接口

抽象类

  • 拥有纯虚函数func(para)=0的类,叫做抽象类
  • 抽象类不可以直接实例化对象,但可以定义指针和引用变量
#include <iostream>
using namespace std;
#include <string>

class Car
{
public:
	Car(string name, double oil) : _name(name), _oil(oil) {}
	double getLeftMiles() {
		return _oil * getMilesPerGallon(); //发生动态绑定
	}
	string getName() { return _name; }
protected:
	string _name;
	double _oil; 
	virtual double getMilesPerGallon() = 0; //纯虚函数
};

double showLeftMiles(Car& car)
{
	return car.getLeftMiles();
}

class Benz : public Car
{
public:
	Benz(string name, double oil) : Car(name, oil) {}
	double getMilesPerGallon() { return 19.0; }
};

class BMW : public Car
{
public:
	BMW(string name, double oil) : Car(name, oil) {}
	double getMilesPerGallon() { return 17.0; }
};

class Audi : public Car
{
public:
	Audi(string name, double oil) : Car(name, oil) {}
	double getMilesPerGallon() { return 16.0; }
};

int main()
{
	Benz c1("Benz", 10.0);
	cout << c1.getName() << ": " << showLeftMiles(c1) << endl;
	BMW c2("BMW", 10.0);
	cout << c2.getName() << ": " << showLeftMiles(c2) << endl;
	Audi c3("Audi", 10.0);
	cout << c2.getName() << ": " << showLeftMiles(c3) << endl;


	return 0;
}

标签:oil,name,33,double,Car,抽象类,public
From: https://www.cnblogs.com/sio2zyh/p/17987575

相关文章

  • Day58 抽象类
    抽象类通过abstract修饰符来修饰类就叫抽象类通过abstract修饰符来修饰方法就叫抽象方法Action.java及笔记!packagecom.oop.demo10;//在一个类前面加上abstract就变成了抽象类:类extends:单继承~(接口可以多继承)publicabstractclassAction{//约束~有......
  • 【技术探讨】用户使用其他厂家433MHz无线模块时,购买样品OK,小批量100个就会出现偶尔无
        许多用户使用其他厂家的433M透传无线模块反馈这样的问题:前期购买几个样品测试,在无线信号覆盖半径内,收发包测试都很稳定,但是小批量购买100个模块收发就会出现无法收发的情况。这是什么原因呢?    首先科普一下,无线电波,在同一个信道同一时刻只允许一个节点发射行......
  • P3355 骑士共存问题题解
    题目链接:P3355骑士共存问题-洛谷|计算机科学教育新生态(luogu.com.cn)题解:棋盘问题考虑黑白染色成为二分图后做。观察马的性质,可知一个点只能到一个异色点,所以,构造方案可以先将所有同色点放上马,再考虑有那些异色点不可以放置。方法一:网络流,时间复杂度为O(|E|min(|E|0.5......
  • P3389 【模板】高斯消元法
    #include<bits/stdc++.h>usingnamespacestd;doublemax(doublea,doubleb){ if(a>=b)returna; if(a<b)returnb;}intn;doublea[1010][1010];doublea1[1010][1010];intmain(){ scanf("%d",&n); for(inti=1;i<=n;i++) { ......
  • P3374 【模板】树状数组 1
    part1#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;structnode1{intl,r,value;};node1node[2000020];inta[500010];voidmt(intp,intl,intr){intmid=(l+r)>>1;node[p].l=l;node[p].r=r;if(l==r)......
  • P3368 【模板】树状数组 2
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintMax=500005;inta[Max];intn,m;intlowbit(intx){ returnx&-x;}voidadd(intx,inty){ while(x<=n){ a[x]+=y; x+=lowbit(x); }}intsum(intx)......
  • 33_把二叉搜索树转换为累加树
    538.把二叉搜索树转换为累加树给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键小于节点键的节点。节点的右子......
  • “哄女友挑战”上线即爆火,两天烧掉 10 亿 token,AI 已通关丨 RTE 开发者日报 Vol.133
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • 解决centos7修改网卡名为eth0仍显示ens33的问题
    1.进入/etc/sysconfig/network-scripts修改网卡配置文件中的DEVICE=与NAME=参数为eth0保存退出后再修改网卡配置文件名mvifcfg-ens33ifcfg-eth02.重新生成grub2文件编辑/etc/default/grub配置文件,在GRUB_CMDLINE_LINUX这个参数后面加入:net.ifnames=0biosdevnam......
  • 今天学习基础知识,抽象类和接口
    今天学习基础知识,抽象类和接口,之前这块学的不太好没有太了解。抽象类与接⼝1.抽象类抽象类和抽象⽅法都使⽤abstract关键字进⾏声明。如果⼀个类中包含抽象⽅法,那么这个类必须声明为抽象类。抽象类和普通类最⼤的区别是,抽象类不能被实例化,只能被继承。privateInnerClas......