阿狸先森|一文让你学完C++,干货收藏( 七 )

<< "Total area: " << Rect.getArea() << endl;return 0;}当上面的代码被编译和执行时 , 它会产生下列结果:
Total area: 35访问控制和继承派生类可以访问基类中所有的非私有成员 。 因此基类成员如果不想被派生类的成员函数访问 , 则应在基类中声明为 private 。
我们可以根据访问权限总结出不同的访问类型 , 如下所示:
阿狸先森|一文让你学完C++,干货收藏一个派生类继承了所有的基类方法 , 但下列情况除外:

  • 基类的构造函数、析构函数和拷贝构造函数 。
  • 基类的重载运算符 。
  • 基类的友元函数 。
继承类型当一个类派生自基类 , 该基类可以被继承为 public、protected 或 private 几种类型 。 继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的 。
我们几乎不使用 protected 或 private 继承 , 通常使用 public 继承 。 当使用不同类型的继承时 , 遵循以下几个规则:
  • 公有继承(public):当一个类派生自公有基类时 , 基类的公有成员也是派生类的公有成员 , 基类的保护成员也是派生类的保护成员 , 基类的私有成员不能直接被派生类访问 , 但是可以通过调用基类的公有和保护成员来访问 。
  • 保护继承(protected):当一个类派生自保护基类时 , 基类的公有和保护成员将成为派生类的保护成员 。
  • 私有继承(private):当一个类派生自私有基类时 , 基类的公有和保护成员将成为派生类的私有成员 。
多继承【阿狸先森|一文让你学完C++,干货收藏】多继承即一个子类可以有多个父类 , 它继承了多个父类的特性 。
C++ 类可以从多个类继承成员 , 语法如下:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…{<派生类类体>};其中 , 访问修饰符继承方式是 public、protected 或 private 其中的一个 , 用来修饰每个基类 , 各个基类之间用逗号分隔 , 如上所示 。 现在让我们一起看看下面的实例:
实例
#include using namespace std; // 基类 Shapeclass Shape {public:void setWidth(int w){width = w;}void setHeight(int h){height = h;}protected:int width;int height;}; // 基类 PaintCostclass 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;}当上面的代码被编译和执行时 , 它会产生下列结果:
Total area: 35Total paint cost: $2450
C++ 重载运算符和重载函数C++ 允许在同一作用域中的某个函数和运算符指定多个定义 , 分别称为函数重载和运算符重载 。
重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明 , 但是它们的参数列表和定义(实现)不相同 。
当您调用一个重载函数或重载运算符时 , 编译器通过把您所使用的参数类型与定义中的参数类型进行比较 , 决定选用最合适的定义 。 选择最合适的重载函数或重载运算符的过程 , 称为重载决策 。
C++ 中的函数重载在同一个作用域内 , 可以声明几个功能类似的同名函数 , 但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同 。 您不能仅通过返回类型的不同来重载函数 。


推荐阅读