您的位置:首页 > 编程语言 > C语言/C++

CPP 6th——类(6)

2015-12-11 11:02 274 查看

继承

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。

继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类B继承于类A,那么B就拥有A的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。

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

以下是两种典型的使用继承的场景:

当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。

当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。

#include<iostream>
using namespace std;

//基类--Pelple
class People{
private:
char *name;
int age;
public:
void setName(char*);
void setAge(int);
char *getName();
int getAge();
};
void People::setName(char *name){ this->name = name; }
void People::setAge(int age){ this->age = age; }
char* People::getName(){ return this->name; }
int People::getAge(){ return this->age;}

//派生类--Student
class Student: public People{
private:
float score;//在继承People类的基础上派生出Student类。
//而且还新增了自己的成员变量score
public:
void setScore(float);//增加了自己的成员函数
float getScore();
};
void Student::setScore(float score){ this->score = score; }
float Student::getScore(){ return score; }

int main(){
Student stu;
stu.setName("小明");
stu.setAge(16);
stu.setScore(95.5f);
cout<<stu.getName()<<"的年龄是 "<<stu.getAge()<<",成绩是 "<<stu.getScore()<<endl;

return 0;
}


本例中,People 是基类,Student 是派生类。Student 类继承了 People 类的成员,同时还新增了自己的成员变量 score 和成员函数 setScore、getScore。

派生类的定义格式:

class Student:public People


People前的public表示共有继承。

由此总结出的继承方式为:

class 派生类名:[继承方式] 基类名
{
派生类新增成员变量和成员函数;
}


继承方式有private,public和protected继承的类型,如果不写,则默认为private类继承。

继承权限和继承方式

1)public继承方式

基类中所有public成员在派生类中为public属性;

基类中所有protected成员在派生类中为protected属性;

基类中所有private成员在派生类中不可访问。

2)private继承方式

基类中的所有public成员在派生类中均为private属性;

基类中的所有protected成员在派生类中均为private属性;

基类中的所有private成员在派生类中均不可访问。

3)protected继承方式

基类中的所有public成员在派生类中为protected属性;

基类中的所有protected成员在派生类中为protected属性;

基类中的所有private成员在派生类中仍然不可访问。

由此可见:

1. 基类成员在派生类中的访问权限不得高于继承方式中指定的权限。例如,当继承方式为 protected 时,那么基类成员在派生类中的访问权限最高也为 protected,高于 protected 的会降级为 protected,但低于 protected 不会升级。

2. 基类中的 private 成员在派生类中始终是不可访问的。

private 继承限制太多,实际开发中很少使用,一般使用 public。

一个继承的例子:

#include<iostream>
class People
{
private:
char *name;
int age;
public:
void setname(char*);
void setage(int);
void display();
};

void People::setname(char *name)
{
this->name=name;
}

void People::setage(int age)
{
this->age = age;
}

void People::display()
{
std::cout << name << "的年龄是" << age;
}

class Student :public People    //派生类
{
private:
float score;
public:
Student(char*, int, float);
void display1();

};

Student::Student(char *name, int age, float score)
{
this->setname(name);    //由于name和age是基类中的私有成员变量
//派生类中的函数成员不能直接访问他们,因此调用基类中的成员函数来访问。
this->setage(age);
this->score = score;
}

void Student::display1()
{
this->display();
std::cout << ",的成绩是" << score << std::endl;
}

int main()
{
Student stu("小明", 15, 96);
stu.display1();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: