zoukankan      html  css  js  c++  java
  • 继承派生基本概念

    1、为什么引入继承机制?
    软件开发提倡“可重用性”高,而C++引入继承机制正是提高代码可重用性的方式之一。
    2、继承与派生的基本概念
    首先继承和派生讲的是一回事。
    继承:在定义一个新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。也称为B继承自A。
    3、注意点

    • 派生类是通过对基类进行修改和扩充得到的。所谓扩充,是指在派生类中,可以扩充新的成员变量和成员函数。所谓修改,是指在派生类中可以重写从基类继承得到的成员。
    • 派生类一经定义后,可以独立使用,不依赖于基类。
    • 派生类拥有基类的全部成员函数和成员变量,不论是private、protected、public 。(在派生类的各个成员函数中,不能访问基类中的private成员。)
    • 派生类和基类拥有同名函数很常见 (支撑修改。),但是最好不要派生类和基类不要有同名成员变量。

    4、继承的语法

    //继承方式可以是:public、private、protected。一般情况下用public。
    class 派生类名:public 基类名
    {
    };
    

    5、派生类对象的内存空间
    派生类对象的体积,等于基类对象的体积,再加上派生类对象自己的成员变量的体积。在派生类对象中,包含着基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。

    class CBase
    {
    	int v1,v2;
    };
    class CDerived:public CBase
    {
    	int v3;
    };
    

    在这里插入图片描述

    6、编程实战中继承的应用
    在Windows面向对象的MFC编程、安卓系统应用程序编程等开发环境中,许多程序员需要写的关键类都继承自编译器提供的基类,而且红往往需要编写同名函数。并且同名函数时,一般先调用基类的同名函数完成必要功能。

    7、举栗子:学籍管理

    #include <iostream>
    #include <string>
    using namespace std;
    class CStudent {
    private:
    	string name;
    	string id; //学号
    	char gender; //性别,'F'代表女,'M'代表男
    	int age;
    public:
    	void PrintInfo();
    	void SetInfo( const string & name_,const string & id_,
    	int age_,
    	char gender_ );
    	string GetName() { return name; }
    };
    
    class CUndergraduateStudent:public CStudent
    {//本科生类,继承了CStudent类
    private:
    	string department; //学生所属的系的名称
    public:
    	void QualifiedForBaoyan() { //给予保研资格
    		cout << “qualified for baoyan” << endl;
    	}
    	void PrintInfo() {
    		CStudent::PrintInfo(); //派生类写同名函数,先调用基类的PrintInfo完成必要功能
    		cout << “Department:<< department <<endl;
    	}
    	void SetInfo( const string & name_,const string& id_,int age_,char gender_ ,const string &department_) {
    		CStudent::SetInfo(name_,id_,age_,gender_); //调用基类的SetInfo
    		department = department_;
    	}
    };
    
    void CStudent::PrintInfo()
    {
    	cout << "Name:" << name << endl;
    	cout << "ID:" << id << endl;
    	cout << "Age:" << age << endl;
    	cout << "Gender:" << gender << endl;
    }
    void CStudent::SetInfo( const string & name_,const string & id_,int age_,char gender_ )
    {
    	name = name_;
    	id = id_;
    	age = age_;
    	gender = gender_;
    }
    
    int main()
    {
    	CUndergraduateStudent s2;
    	s2.SetInfo("Harry Potter ","118829212",19,'M',"Computer Science");
    	cout << s2.GetName() << " ";
    	s2.QualifiedForBaoyan ();
    	s2.PrintInfo ();
    	return 0;
    }
    
  • 相关阅读:
    SQLServer 2008 还原数据库备份版本不兼容的问题
    全排列函数
    n & 1
    最长公共子序列(LCS)最长递增子序列(LIS)
    unity3DGI
    多继承的缺点
    JSON文件导入Unity3d中是空的的问题
    丑数
    整数中1出现的次数
    检测鼠标是否在UI上unity
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764256.html
Copyright © 2011-2022 走看看