C++继承

C++继承

/*
继承允许我们依据另一个类来定义一个类,达到了重用代码功能和提高执行效率的效果
当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可
已有的类称为基类,新建的类称为派生类
// 基类
class Animal {
// eat() 函数
// sleep() 函数
};

//派生类
class Dog : public Animal {
// bark() 函数
};

一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。
定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:
class derived-class: access-specifier base-class
访问修饰符 access-specifier 是 public、protected 或 private 其中的一个
base-class 是之前定义过的某个类的名称
如果未使用访问修饰符 access-specifier,则默认为 private
*/

// 假设有一个基类 Shape,Rectangle 是它的派生类

#include <iostream>
using namespace std;

class Shape
{
public:
	void setLength(double len) { length = len; }
	void setWidth(double wid) { width = wid; }
	void setHeight(double hei) { height = hei; }

	// 成员
	double length;
	double width;
	double height;
};

class painCost
{
public:
	int getCost(double area)
	{
		cost = area * 10;
		return cost;
	}
	double cost;
};

/*
派生类可以访问基类中所有的非私有成员,即基类中的private成员不能在派生类中使用

当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型
即修饰符 access-specifier(几乎不使用 protected 或 private 继承,通常使用 public 继承)
公有继承(public):当一个类派生自公有基类时,
基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,
基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
*/
class Rectangle:public Shape
{
public:
	int getVolume()
	{
		return length*width*height;
	}
	double getArea()
	{
		double Area = (length*height + length*width + width*height) * 2;
		return Area;
	}
};

/*
多继承:
C++ 类可以从多个类继承成员,即一个子类可以由父类
*/
class PainRectangle : public painCost, public Rectangle
{
public:
	double budget = 200;
	bool isInBudget()
	{
		if (cost > budget)
			return true;
		else
			return false;
	}
};

int main()
{
	Rectangle rec;
	rec.setLength(4);
	rec.setWidth(2);
	rec.setHeight(1);

	cout << "矩形的体积为:" << rec.getVolume() << endl;

	PainRectangle Prec;
	Prec.setLength(3);
	Prec.setWidth(2);
	Prec.setHeight(1);
	cout << "长方体的体积为:" << Prec.getVolume() << endl;
	cout << "长方体的表面积为:" << Prec.getArea() << endl;
	cout << "长方体表面涂漆需要花费:" << Prec.getCost(Prec.getArea()) << endl;

	if (Prec.isInBudget())
		cout << "花费为:" << Prec.cost << "\t预算为:" << Prec.budget << "\t超出预算" << endl;
	else
		cout << "花费为:" << Prec.cost << "\t预算为:" << Prec.budget << "\t没有超出预算" << endl;

	getchar();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晨的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值