类的继承与派生

继承与派生

在教材中给出的对类的继承和派生的解释:
“类的继承,是新的类从已有类那里得到已有的特性。”
“从已有的类产生新类的过程就是类的派生。”
新的类是基类的派生类,新的类从基类处得到已有的特性。

一、继承与派生举例

新的类是基类的派生类,新的类从基类处得到已有的特性。
例1、写一个类student,再写一个Student类的派生类Undergraduate。
代码:

#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
 Student()
 {
  name = "abcd";
  old = 0;
 }
 Student(string String1,int years)
 {
  name = String1;
  old = years;
 }
 void SetNO(string String1, int years)
 {
   name = String1;
   old = years;
 }
 string Getname()
 {
  return name;
 }
 int Getold()
 {
  return old;
 }
private:
 string name;
 int old;
};
class Undergrauate : public Student
{
public:
 Undergrauate()
 {
  school = "xx大学";
  major = "xx专业";
 }
 Undergrauate(string S,string M,string N,int O)
 {
  school = S;
  major = M;
  SetNO(N, O);
 }
 string Getschool()
 {
  return school;
 }
 string Getmajor()
 {
  return major;
 }
private:
 string school;
 string major;
};
int main()
{
 Undergrauate student1("西南石油大学","计算机科学与技术专业","海绵宝宝",18);
 cout << "姓名:" << student1.Getname() << endl;
 cout << "年龄:" << student1.Getold() << endl;
 cout << "学校:" << student1.Getschool() << endl;
 cout << "专业:" << student1.Getmajor() << endl;
 system("pause");
 return 0;
}

运行截图:

Student类从Undergraduate类继承了Undergraduate类的public成员,如成员函数Getname和成员函数Getold,在Student类中可以直接访问Undergraduate类的公有成员,在类外可以通过Student类访问Undergraduate类的公有成员。
在这里,Student类是Undergraduate类的派生类,Undergraduate类是Student类的基类。

二、类的继承方式(访问控制)

1、公有继承
“当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可访问。”
2、私有继承
“当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问。”
3、保护继承
“保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。”

例2、在例题1的基础上,规定继承方式为私有继承,并在设法验证该继承方式的特性。

在例题1代码的基础上,将继承方式修改为题目指定的私有继承。

编译器报错,不可再访问派生类从基类继承的基类中的公有函数,因为继承方式为私有继承,派生类继承的基类的公有成员和保护成员再派生类中的属性变为私有,固无法直接访问。

解决方法:由于私有成员不可直接访问,但可以通过成员函数去访问。在Student类中写两个函数,分别再在这两个函数中调用继承的Getname函数和Getold函数。然后在主函数中调用这两个新写的函数即可得到对象的成员name和成员old的值。
实验代码

#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
 Student()
 {
  name = "abcd";
  old = 0;
 }
 Student(string String1,int years)
 {
  name = String1;
  old = years;
 }
 void SetNO(string String1, int years)
 {
   name = String1;
   old = years;
 }
 string Getname()
 {
  return name;
 }
 int Getold()
 {
  return old;
 }
private:
 string name;
 int old;
};
class Undergrauate : private Student
{
public:
 Undergrauate()
 {
  school = "xx大学";
  major = "xx专业";
 }
 Undergrauate(string S,string M,string N,int O)
 {
  school = S;
  major = M;
  SetNO(N, O);
 }
 string Getschool()
 {
  return school;
 }
 string Getmajor()
 {
  return major;
 }
 string GetName()
 {
  return Getname();
 }
 int GetOld()
 {
  return Getold();
 }
private:
 string school;
 string major;
};
int main()
{
 Undergrauate student1("西南石油大学","计算机科学与技术专业","海绵宝宝",18);
 cout << "姓名:" << student1.GetName() << endl;
 cout << "年龄:" << student1.GetOld() << endl;
 cout << "学校:" << student1.Getschool() << endl;
 cout << "专业:" << student1.Getmajor() << endl;
 system("pause");
 return 0;
}

运行截图:

总结:继承方式是怎样的,基类的公有成员和保护成员的属性在派生类中同继承的方式一样(公有继承除外,在公有继承中,基类的成员继承到派生类中时其属性不变),且无论继承方式是什么,派生类都不可直接访问基类的私有成员。

原文地址:https://www.cnblogs.com/TracerLyh/p/11659979.html

时间: 2024-11-03 22:04:48

类的继承与派生的相关文章

模块的封装之C语言类的继承和派生

[交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我们将 在此的基础上介绍C语言类的继承和派生.其实继承和派生是一个动作的两种不同角度的表达 .当我们继承了一个基类而创造了一个新类时,派生的概念就诞生了.派生当然是从基类派生的.派生出来的类当然是继承了基类的 东西.继承和派生不是一对好基友,他们根本就是一个动作的两种不同的说法,强调动作的起始点的时候

黑马程序员-----类的继承和派生概念

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲 类的继承和派生概念 本小节知识点: 1.[理解]什么是继承? 2.[掌握]类的继承和派生概念 1.什么是继承? 2.OC中的继承与派生 1 #import <Foundation/Foundation.h> 2 3 @in

Day17:类的继承、派生、组合和接口

一.类的继承.派生和组合 继承是一种创建新类的方式,在Python中,新类可以继承一个或多个父类,父类又可称为基类或者超类,新建的类称为派生类或子类. 在Python3中,所有类都默认继承object,都是新式类.在Python2中,有经典类和新式类.没有继承object类以及object的子类的类都是经典类. 1.继承 Python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass clas

类的继承和派生

一.类的继承.派生和组合 继承是一种创建新类的方式,在Python中,新类可以继承一个或多个父类,父类又可称为基类或者超类,新建的类称为派生类或子类. 在Python3中,所有类都默认继承object,都是新式类.在Python2中,有经典类和新式类.没有继承object类以及object的子类的类都是经典类. 1.继承 Python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass clas

[C++]类的继承与派生

继承性是面向对象程序设计的第二大特性,它允许在既有类的基础上创建新类,新类可以继承既有类的数据成员和成员函数,可以添加自己特有的数据成员和成员函数,还可以对既有类中的成员函数重新定义.利用类的继承和派生实现了更高层次的代码可重用性,符合现代软件开发的思想. C++语言同时支持单一继承和多重继承.单一继承是指派生类只从一个基类继承而来:相应的,多重继承指派生类同时从两个或更多的基类继承而来.java只支持单一继承. 一. 派生类 派生类的定义格式如下: class <派生类名>:[继承方式]&l

Day29:类的继承、派生、组合和接口

一.类的继承.派生和组合 继承是一种创建新类的方式,在Python中,新类可以继承一个或多个父类,父类又可称为基类或者超类,新建的类称为派生类或子类. 在Python3中,所有类都默认继承object,都是新式类.在Python2中,有经典类和新式类.没有继承object类以及object的子类的类都是经典类. 1.继承 Python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass clas

09--c++ 类的继承与派生

c++ 类的继承与派生 一.基本概念 1.类的继承,是新的类从已有类那里得到已有的特性.或从已有类产生新类的过程就是类的派生.原有的类称为基类或父类,产生的新类称为派生类或子类. 2.派生类的声明: class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n { 派生类成员声明: }; 3.一个派生类可以同时有多个基类,这种情况称为多重继承,派生类只有一个基类,称为单继承.直接派生,间接派生. 4.继承方式规定了如何访问基类继承的成员.继承方式有public, p

实验4 类的继承、派生和多态(1)

实验目的 1. 理解类的继承和派生机制 2. 掌握派生类的定义和使用 3. 理解和掌握派生类成员的标识和访问中同名覆盖原则.二元作用域分辨符和虚基类的用法 4. 掌握派生类构造函数和析构函数的定义及调用次序 5. 理解运算符重载的目的,掌握运算符重载函数的编写方法 实验准备 1. 类的继承和派生 引入继承和派生机制的目的 基本概念:继承.派生.基类.直接基类.间接基类 .派生类 语法 派生类定义的语法格式(单重继承和多重继承) 派生类构造函数及其初始化列表书写形式 派生类成员的标识与访问 同名覆

c++实验四 类的继承、派生和多态

实验目的 1. 理解类的继承和派生机制 2. 掌握派生类的定义和使用 3. 理解和掌握派生类成员的标识和访问中同名覆盖原则.二元作用域分辨符和虚基类的用法 4. 掌握派生类构造函数和析构函数的定义及调用次序 5. 理解运算符重载的目的,掌握运算符重载函数的编写方法 实验内容 一.ElectricCar类 #ifndef BATTERY_H #define BATTERY_H class Battery { public: Battery(int nb = 70); int showbattery