C/C++教程

C++面向对象程序设计(五)

本文主要是介绍C++面向对象程序设计(五),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C++面向对象程序设计(五)

1.继承和派生的概念

继承:在定义一个新的类B时,如果该类与某个已有的类A相似(B拥有A的全部特点),吧么就可以把A作为一个基类,而把B作为基类的一个派生类(也称为子类)。

派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。

派生类一经定义后,可以独立使用,不依赖于基类。

派生类拥有基类的远不成员函数和成员变量,不论是public,protected,private。

在派生类的各个成员函数中,不能访问基类中的private成员。

写法:

class 派生类名:public 基类名{ };

class CStudent{
  private:
  string sName;
  int nAge;
  public:
  bool isThreeGood(){};
  void SetName(const string &name){sName=name;}
};
class CUndergraduateStudent:public CStudent{
  private:
  int nDepartment;
  public:
  bool is ThreeGood(){};//覆盖
  bool CanBaoYan(){};
};
class CGraduatedStudent:public CStudnet{
  private:
  int nDepartment;
  char szMentorName[20];
  public:
  int CountSalary(){};
};
  • 派生类对象的内存空间

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

#include <iostream>
#include <string>
using namespace std;
class CStudnet{
  private:
  string name;
  string id;
  char gender;
  int age;
  public:
  void PrintInfo();
  void SetInfo(const string & name_,const string &id_,int age_,char gender_);
  string GetName(){return name;}
};
class CUndergraduateStudent:public CStudnet{
  private:
  string department;
  public:
  void QUalifiedForBaoYan(){
    cout<<"qualified for baoyan"<<endl;
  }
  void PrintInfo(){
    CStudnet::PrintInfo();
    cout<<"Department:"<<department<<endl;
  }
  void SetInfo(const string &name_,const string &id_,int age_,char gender_,const string&department_){
    CStudnet::SetInfo(name_,id_,age_,geender);
    department=department_;
  }
};
void CStudent::PrintfInfo(){
  cout<<"Name:"<<name<<endl;
  cout<<"ID:"<<id<<endl;
  cout<<"Age:"<<age<<endl;
  cout<<"Gender:"<<gender<<endl;
}
void CStudnet::SetInfo(const string&name_,const string & id,int age_,char gender_){
  name=name_;
  id=id_;
  age=age_;
  gender=gender_;
}
int main(){
  CUndergraduateStudnet s2;
  s2.SetInfo("Harry Potter","118829212",19,'M',"Computer Science");
  cout<<s2.GetName()<<" ";
  s2.QualifiedForBaoYan();
  s2.printInfo();
  return 0;
}

习题:

如果多种事物,有一些共同的特点,又有各自不同的特点,如何编写类来代表这些事物比较合适?(C)

A)为每种事物独立编写一个类,各类之间互相无关

B)写一个类代表其中一种事物,代表其他事物的类,都从这个类派生出来

C)概括所有事物的共同特点,写一个基类。然后为每种事物写一个类,都从基类派生而来

D)一共就写一个类,包含所有事物的所有特点,然后用一个成员变量作为标记来区分不同种类的事物

2.继承关系和复合关系

继承:“是”关系:

  • 基类A,B是基类A的派生类
  • 逻辑上要求:“一个B对象也是一个A对象”

符合:“有”关系

  • 类C中“有”成员变量k,k是类D的对象,则C和D是复合关系
  • 一般逻辑上要求:C对象是C对象的固有属性或组成部分

举一个栗子

这篇关于C++面向对象程序设计(五)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!