44、继承的方式

来源:互联网 发布:网络女神pans瑞思视频 编辑:程序博客网 时间:2024/05/08 09:44

   当一个类从另一个类继承时,子类能够从父类继承到的是父类的公有类型的成员属性和成员方法,以及保护类型的成员属性和成员方法。这些子类从父类继承得到的属性和方法,在子类中是什么类型?
  这个问题与派生类的定义有关,基类的说明前有public、protected和private进行说明,将从父类继承来的属性和方法定义为不同的类型。
  如果基类是由public关键字说明,那么派生类的对象能够直接使用基类中定义的公有类型的成员属性和成员方法,也就是基类中公有类型和方法也当做派生类的公有类型的变量来使用。而原来基类中的保护类型的属性和方法,在派生类中,也当作保护类型的属性和方法,对于这些保护类型的属性和方法,也只能在自身内部使用。
  如果基类是由private关键字来指定,那么继承来的属性和方法,不管在父类中什么类型,派生类都只能用作内部数据和处理过程,也就是说,在派生类中,所有继承而来的属性和方法都是私有类型的。
  如果基类是由protected来进行说明的话,那么子类从父类继承而来的所有属性和方法,将在子类中被当做保护类型的数据。
  
例1:子类由基类继承时由关键字 public 说明

//子类由基类继承时由关键字 public 说明#include<iostream>class Point{private:   int data;protected:   int X,Y;public:    void SetXY(int x,int y);    void GetXY(int &x,int &y);};void Point::SetXY(int x,int y){    X=x;    Y=y;}void Point::GetXY(int &x,int &y){    x=X;    y=Y;}class ColorPoint:public Point{public:    int Color;};void main(){    ColorPoint Cp;    Cp.SetXY(10,20);    int x,y;    Cp.GetXY(x,y);    Cp.Color=1;    std::cout<<"Point is ("<<x<<","<<y<<")"<<std::endl;    std::cout<<"Color is "<<Cp.Color<<std::endl;}

这里写图片描述

例2:子类由基类继承时由关键字 private 说明

//子类由基类继承时由关键字 private 说明#include<iostream>class Point{private:   int data;protected:   int X,Y;public:    void SetXY(int x,int y);    void GetXY(int &x,int &y);};void Point::SetXY(int x,int y){    X=x;    Y=y;}void Point::GetXY(int &x,int &y){    x=X;    y=Y;}class ColorPoint:private Point{public:    int Color;    void Set(int x,int y);    void Get(int &x,int&y);};void ColorPoint::Set(int x,int y){    SetXY(x,y);}void ColorPoint::Get(int &x,int &y){    GetXY(x,y);}void main(){    ColorPoint Cp;    Cp.Set(10,20);            //不可再用Cp.SetXY(10,20);没有访问权限    int x,y;    Cp.Get(x,y);              //不可再用  Cp.GetXY(x,y);    Cp.Color=1;    std::cout<<"Point is ("<<x<<","<<y<<")"<<std::endl;    std::cout<<"Color is "<<Cp.Color<<std::endl;}

这里写图片描述
  

0 0