ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-09-16 17:33:37  阅读:148  来源: 互联网

标签:int 成员 基类 C++ public 面向对象 派生类 程序设计 class


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对象的固有属性或组成部分

举一个栗子

标签:int,成员,基类,C++,public,面向对象,派生类,程序设计,class
来源: https://blog.csdn.net/jingyu_1/article/details/120333633

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有