C++ 继承和派生

一、继承和派生的基本概念

“继承”就是支持代码重用的机制之一

二、什么是派生?

书本概念;从一个或多个以前定义的类(基类)产生新类的过程称为派生。这个新类称为派生类。

自己理解:就像我们自己在写程序的时候写一个学生类,这个学生类是一个抽象的,具体不知道是那些学生,因为学生的范围很广,包括小学生,中学生,大学生等等,所以为了具体一点我们需要创建新类,创建小学生,中学生,大学生等类,它具有学生类的属性,所以创建这个新类的过程就是派生。

派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能

三、类的继承

类的继承是指派生类继承基类的数据成员和成员函数。继承常用来表示类属关系,不能将继承理解为构成关系。

当从现有类中派生出新类时,派生类可以有以下几种变化:

1.增加新成员(数据成员和成员函数)。

2.重新定义已有的成员函数

3.改变基类的访问权限。

继承实例,定义一个基类 People,然后由此派生出 Student 类:

#include<iostream>

using namespace std;

//基类 Pelple

class People{

public:

void setname(char *name);

void setage(int age);

char *getname();

int getage();

private:

char *m_name;

int m_age;

};

void People::setname(char *name){ m_name = name; }

void People::setage(int age){ m_age = age; }

char* People::getname(){ return m_name; }

int People::getage(){ return m_age;}

//派生类 Student

class Student: public People{

public:

void setscore(float score);

float getscore();

private:

float m_score;

};

void Student::setscore(float score){ m_score = score; }

float Student::getscore(){ return m_score; }

int main(){

Student stu;

stu.setname("小明");

stu.setage(16);

stu.setscore(95.5f);

cout<<stu.getname()<<"的年龄是 "<<stu.getage()<<",成绩是 "<<stu.getscore()<<endl;

return 0;

}

 

语法为

class 派生类名:[继承方式] 基类名{

    派生类新增加的成员

};

在面向对象的程序设计中有几类修饰符,通过修饰符才可以修饰类的成员,还可以指定继承方式。

继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected(受保护的)。如果不写,默认为 private(成员变量和成员函数默认也是 private)

四、修饰符

public、protected、private 指定继承方式

不同的继承方式会影响基类成员在派生类中的访问权限。

1.public继承方式

  • 基类中所有 public 成员在派生类中为 public 属性;
  • 基类中所有 protected 成员在派生类中为 protected 属性;
  • 基类中所有 private 成员在派生类中不能使用。

2. protected继承方式

  • 基类中的所有 public 成员在派生类中为 protected 属性;
  • 基类中的所有 protected 成员在派生类中为 protected 属性;
  • 基类中的所有 private 成员在派生类中不能使用。

3.private继承方式

  • 基类中的所有 public 成员在派生类中均为 private 属性;
  • 基类中的所有 protected 成员在派生类中均为 private 属性;
  • 基类中的所有 private 成员在派生类中不能使用。

继承方式/基类成员

public成员

protected成员

private成员

public继承

public

protected

不可见

protected继承

protected

protected

不可见

private继承

private

private

不可见

五、 单一继承和多重继承

什么是单一继承?

一个类从一个基类派生。

在C++课本中体现了,但是继承的一般形式如下:

Class 派生类名:访问控制   基类名{

private:

成员声明列表

protected:

成员声明列表:

public:

成员声明列表
};

什么是多重继承?

一个类从多个基类派生。

Class 类名1:访问控制  类名2,访问控制 类名3……..访问控制 类名n

{….//定义派生类自己的成员};

 

演示类的继承关系

#include<iostream>
using namespace std;
//基类People
class People{
public:
void setname(char *name);
void setage(int age);
void sethobby(char *hobby);
char *gethobby();
protected:
char *m_name;
int m_age;
private:
char *m_hobby;
};
void People::setname(char *name){ m_name = name; }
void People::setage(int age){ m_age = age; }
void People::sethobby(char *hobby){ m_hobby = hobby; }
char *People::gethobby(){ return m_hobby; }
//派生类Student
class Student: public People{
public:
void setscore(float score);
protected:
float m_score;
};
void Student::setscore(float score){ m_score = score; }
//派生类Pupil
class Pupil: public Student{
public:
void setranking(int ranking);
void display();
private:
int m_ranking;
};
void Pupil::setranking(int ranking){ m_ranking = ranking; }
void Pupil::display(){
cout<<m_name<<"的年龄是"<<m_age<<",考试成绩为"<<m_score<<"分,班级排名第"<<m_ranking<<",TA喜欢"<<gethobby()<<"。"<<endl;
}
int main(){
Pupil pup;
pup.setname("小明");
pup.setage(15);
pup.setscore(92.5f);
pup.setranking(4);
pup.sethobby("乒乓球");
pup.display();
return 0;
}

运行结果:
小明的年龄是15,考试成绩为92.5分,班级排名第4,TA喜欢乒乓球。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值