c++总结——继承、多态

这周结束了程序设计B的理论学习,我想通过这次的总结的机会系统总结这两章一些细节,最后在谈谈这两章的收获。

一、 继承

  1. 类继承关系的语法形式
    class 派生类名 : 基类名表
    {
    数据成员和成员函数声明
    };

  2. 派生类的生成过程经历了三个步骤:
    吸收基类成员(全部吸收(构造、析构除外),但不一定可见)
    在C++的继承机制中,派生类吸收基类中除构造函数和析构函数之外的全部成员。
    改造基类成员
    通过在派生类中定义同名成员(包括成员函数和数据成员)来屏蔽(隐藏)在派生类中不起作用的部分基类成员。
    添加派生类新成员
    仅仅继承基类的成员是不够的,需要在派生类中添加新成员,以保证派生类自身特殊属性和行为的实现。

  3. 一个例子:

在这里插入图片描述

#include<iostream>
using namespace std ;
class A
{
    public :
      void  get_XY()   {
    cout << "Enter two numbers of x, y : " ;  cin >> x >> y ; }
      void  put_XY()    {
    cout << "x = "<< x << ", y = " << y << '\n' ; }
   protected:    int x, y ;
};
class B : public A
{
    public :
      int  get_S() {
    return s ; };
      void  make_S()  {
    s = x * y ; };    // 使用基类数据成员x,y
   protected:   int s;
};
class C : public B
{
    public : 
      void  get_H()   {
    cout << "Enter a number of h : " ;  cin >> h ; } 
      int  get_V() {
    return v ; }
      void  make_V()  {
    make_S(); v = get_S() * h ; } 	// 使用基类成员函数
   protected:    int h, v;
};

int main()
{
    A objA ;
   B objB ;
   C objC ;
   cout << "It is object_A :\n" ;
   objA.get_XY() ;
   objA.put_XY() ;
   cout << "It is object_B :\n" ;
   objB.get_XY() ;
   objB.make_S() ;
   cout << "S = " << objB.get_S() << endl ;
   cout << "It is object_C :\n" ;
   objC.get_XY() ;
   objC.get_H();
   objC.make_V() ;
   cout << "V = " << objC.get_V() << endl ;
}

  1. 基类与子类的set、show函数
void set(){
       //隐藏了基类中的同名成员       
	     Person::set(); //调用继承于基类的成员函数访问继承于基类的数据成员
   	     cout<<"zhuanye\tt_class\tscore"<<endl;
	     cin>>zhuanye>>t_class>>score;
	}
	void show()	{
   
		Person::show();
		cout<<zhuanye<<"  "<<t_class<<"  "<<score<<endl;
	}

  1. ●派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员
    ●在派生类中使用基类的同名成员,显式地使用类名限定符:
    类名 :: 成员

  2. ●基类定义的静态成员,将被所有派生类共享(基类和派生类共享基类中的静态成员)
    ● 派生类中访问静态成员,用以下形式显式说明:
    类名 :: 成员
    通过对象访问 对象名 . 成员

  3. 基类的初始化

构造函数

● 派生类构造函数声明为:

派生类构造函数 ( 变元表 ) : 基类 ( 变元表 ) , 对象成员1( 变元表 ) … 对象成员n ( 变元表 )

●构造函数执行顺序:基类 -> 对象成员-> 派生类

#include<iostream>
using namespace std ;
class  parent_class
{
        int  data1 , data2 ;
   public :
       parent_class ( int  p1 , int  p2 ) {
    data1 = p1; data2 = p2; }
       int  inc1 () {
    return  ++ data1; }
       int  inc2 () {
    return  ++ data2 ; }
       void  display  ()  {
   cout << "data1=" << data1 << " , data2=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值