赞
踩
一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:
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 setWidth(int w)
- {
- width = w;
- }
- void setHeight(int h)
- {
- height = h;
- }
- // char name[];
- void like(char *name)
- {
- cout<<"I am a "<<name<<endl;
- }
- protected:
- int width;
- int height;
- };
-
- // 派生类
- class Rectangle: public Shape
- {
- public:
- void fun(char *animals)
- {
- cout<<"I am a "<<animals<<endl;
- }
- int getArea()
- {
- return (width * height);
- }
- };
-
- int main(void)
- {
- Rectangle Rect;
-
- Rect.setWidth(5);
- Rect.setHeight(7);
-
- // 输出对象的面积
- cout << "Total area: " << Rect.getArea() << endl;
- Rect.fun("cat");
- Rect.like("cat");
- return 0;
- }
当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。
我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:
多继承
多继承即一个子类可以有多个父类,它继承了多个父类的特性。
C++ 类可以从多个类继承成员,语法如下:
- class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
- {
- <派生类类体>
- };
访问修饰符继承方式是 public、protected 或 private 其中的一个,用来修饰每个基类,各个基类之间用逗号分隔.
- #include <iostream>
-
- using namespace std;
-
- // 基类 Shape
- class Shape
- {
- public:
- void setWidth(int w)
- {
- width = w;
- }
- void setHeight(int h)
- {
- height = h;
- }
- protected:
- int width;
- int height;
- };
-
- // 基类 PaintCost
- class PaintCost
- {
- public:
- int getCost(int area)
- {
- return area * 70;
- }
- };
-
- // 派生类
- class Rectangle: public Shape, public PaintCost
- {
- public:
- int getArea()
- {
- return (width * height);
- }
- };
-
- int main(void)
- {
- Rectangle Rect;
- int area;
-
- Rect.setWidth(5);
- Rect.setHeight(7);
-
- area = Rect.getArea();
-
- // 输出对象的面积
- cout << "Total area: " << Rect.getArea() << endl;
-
- // 输出总花费
- cout << "Total paint cost: $" << Rect.getCost(area) << endl;
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。