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