C++继承性和多态性(一)

1. 继承的概念和派生类的定义
继承和派生的基本概念: 
继承性是面向对象程序设计的重要特性之一,C++程序的可重用性是通过继承机制来实现的。
继承在概念上将具有从属关系的类连接起来,便于描述现实实体的层次关系。
在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。
 一个新类从已有的类那里获得其已有特性,称为类的继承。相反,从已有的类产生一个新的子类,
     
     
    称为类的派生。
派生类继承了基类(父类)的所有数据成员和成员函数,并可以对成员作必要的增加或调整。
基类和派生类是相对而言的,形成类的继承层次结构:
① 父类可以派生出多个子类。
② 子类又可以作为父类,再派生出新的派生类。
③ 所有的子孙后代都继承了祖辈的基本特征,同时又有区别和发展。
单继承派生类的声明格式:
     
     
    class <派生类名> :
<继承方式><基类名>
     
{
     
     
<派生类新增加的数据成员>
     
     
<派生类新增加的成员函数>
     
 };  
多继承派生类的定义格式为:
class <派生类名> :
<继承方式1><基类名1>,<继承方式2><基类名2>,…
      {
    
<派生类新增加的数据成员>
     
     
<派生类新增加的成员函数>
     
 };
继承方式包括:public(公用的),private(私有的)和protected(受保护的),缺省为私有的。
派生类的构成: 
派生类成员有两部分:一是从基类继承过来的成员,体现共性;二是自己增加的成员,体现个性。
C++继承性和多态性(一)

构造一个派生类包括以下3部分工作:
 ① 不可选择地从父类接收全部成员(构造和析构函数除外)。
缺陷:数据冗余、空间浪费和效率降低。这在目前C++中无法解决。
解决:在设计基类时要充分考虑到派生类的需要。(事实上有些类是专门作为基类而设计的)
   ② 调整从基类接收的成员:
方法一:改变基类成员在派生类中的访问属性——通过指定继承方式来实现。
方法二:在派生类声明同名成员——覆盖基类成员。!!注意,对于成员函数,不仅要同名还要参数个数和类型都相同。(请问,这是为什么?)
 ③ 在声明派生类时增加成员:
体现派生类对基类功能的扩展,同时定义自己的构造和析构函数,这需要精心设计。
//基类Point类的声明
class Point
{private:
      float
X,Y;
  public:
      void
InitP(float xx=0, float yy=0)
     
 {  
X=xx;
Y=yy; 
     
 }
      void
Move(float xOff, float yOff)
     
 {
X+=xOff;   
Y+=yOff;
     
 }
      float
GetX() {return X;}
      float
GetY() {return Y;}
};
//派生类声明
class CRect: public Point
{ private: //新增私有数据成员
     
 float W,H; 
   public:
     
  //新增公有成员函数
      void
InitR(float x, float y, float w, float h)
     
{
 InitP(x,y);  
//调用基类公有成员函数
 W=w;
   
 H=h;
     
 }
     
 float GetH() {return H;}
     
 float GetW() {return W;}
};
#include< iostream >
#include< math.h >
using namespace std;
int main()
{  
CRect rect;
   
rect.InitR(2,3,20,10);
     
    //通过派生类对象访问基类公有成员
    rect.Move(3,2);
 
    cout
<<rect.GetX()<<','
     
   
<<rect.GetY()<<','
     
   
<<rect.GetH()<<','
<<rect.GetW()<<endl;
    return 0;
}
result:
5 5 10  20
派生类成员的访问属性:
基类成员在派生类中的访问属性涉及2点:
   ①基类成员本身声明的访问属性:
 共有、私有、保护类型
   ②派生类对基类的继承方式:
 共有继承:保持原数据访问属性不变。
 私有继承:继承来的成员都变为私有。
 保护继承:原私有属性不变,其他都为保护类型。

原文链接: https://www.cnblogs.com/dreamsyeah/p/5878408.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++继承性和多态性(一)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/131460

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月11日 上午12:40
下一篇 2023年2月11日 上午12:40

相关推荐