面向对象的另一大特性《继承》

C++是一门面向对象的编程语言,而面向对象的三大特性分别是   封装、继承、多态

今天就来谈谈面向对象中的另一个特性--------继承

继承和现实中的继承类似,在现实生活中儿子会具备父亲的一些特征,而且可能会继承父亲的财产

儿子与父亲的关系图如下图所示

在编程中将父亲定义为基类(或者定义为父类),儿子定义为子类,而C++中就是用继承来表示这种基类与子类的关系

我再用一个与程序员息息相关的例子来描述继承

然后通过代码进一步理解继承,我在前面的博客中写过一个Student类,这次将通过学生类派生出一个Student1类

Student类的实现代码可以参考http://blog.csdn.net/u010105970/article/details/25637493

在使用继承前Student类的代码

#include <iostream>
#include <String>

using namespace std;

class Student//定义一个Student类
{
public:
    //构造函数
    Student(int n, string nam, char s)
    {
        num = n;
        name = nam;
        sex = s;
    }

    //显示学生信息
    void show()
    {
        cout<<"num = "<<num<<endl;
        cout<<"name = "<<name<<endl;
        cout<<"sex = "<<sex<<endl<<endl;
    }

//数据成员的类型为保护类型
protected:
    int num;//学号
    string name;//姓名
    char sex;//性别
};

void main()
{
    //定义一个Student的对象stud1
     Student stud1(20010, "Hexing", 'm');

     //stud1调用成员函数show()实现学生信息的输出
     stud1.show();

    system("pause");
}

程序执行结果

Student1继承Student后的代码

#include <iostream>
#include <String>

using namespace std;

class Student//定义一个Student类
{
public:
    //构造函数
    Student(int n, string nam, char s)
    {
        num = n;
        name = nam;
        sex = s;
    }

    //显示学生信息
    void show()
    {
        cout<<"num = "<<num<<endl;
        cout<<"name = "<<name<<endl;
        cout<<"sex = "<<sex<<endl<<endl;
    }

//数据成员的类型为保护类型
protected:
    int num;//学号
    string name;//姓名
    char sex;//性别
};

//Student1以公有继承(public)的方式继承Student
class Student1 : public Student
{
public:

    //构造函数中使用初始化表
    Student1(int n, string nam, char s, int a, string ad):
    Student(n, nam, s)
    {
        age = a;
        addr = ad;
    }

    //显示学生信息
     void show1()
    {
        cout<<"num = "<<num<<endl;
        cout<<"name = "<<name<<endl;
        cout<<"sex = "<<sex<<endl;
        cout<<"age = "<<age<<endl;
        cout<<"addr = "<<addr<<endl<<endl;
    }

//增加了新的数据成员
private:
    int age;//年龄
    string addr;//地址
};

void main()
{
    //定义一个Student1类的对象stud
    Student1 stud1(10010, "Wangli", 'f', 19,
        "115 Beijing Road, Shanghai");

    //定义一个Student1类的对象stud2
     Student1 stud2(10011, "Zhangfun", 'm', 21,
        "213 Shanghai Road, Beijing");

     //定义一个Student类的对象stud3
     Student stud3(20010, "Hexing", 'm');

     stud1.show1();//调用成员函数,显示学生信息
     stud2.show();//因为对象stud2的类继承自Student,所以stud2可以使用Student类的成员函数
     stud3.show();//调用成员函数,显示学生信息

    system("pause");
}

执行结果

说明:

上面的代码中父类Student派生出子类Student1,所以子类Student1继承了父类Student的全部属性

子类可以访问父类的数据成员和成员函数

而访问限制受到了继承方式和访问级别的影响

可以通过查看下面的表格查看继承方式和访问级别对访问成员的影响

时间: 2024-11-05 13:46:46

面向对象的另一大特性《继承》的相关文章

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

面向对象的三个特性:封装

面向对象的三个特性:封装.继承.多态 //1.封装目的:让类更加安全,不让外界直接访问类的成员 //具体做法[1]将成员设为私有:访问修饰符 class ren { [var $age;] private $age; } $r=new ren(); echo $r->age;//访问不到 [2]造成员方法来操作变量 class ren { private $age; //制造方法去给变量$age赋值 public function SetAge($a) { if($a>18 and $a<

2、面向对象以及winform的简单运用(面向对象的四大基本特性)

面向对象的四大基本特性 面向对象的核心概念就是封装.抽象.继承.多态这四大基本特性,在这里先解释一下它们的定义: 封装:是一种隐藏信息的特性.找到变化并且把它封装起来,你就可以在不影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设计模式的基础,就是封装变化,因此封装的作用,就解决了程序的可扩展性. 抽象:在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的事物所述的类型,分析它们拥有哪些性质与功能,再将它们抽象为在计算机虚拟世界中才有意义的实体——类,在程序运行时,由类创建

面向对象三大特征之【继承】,【多态】

//面向对象三大特性//继承 //概念:子类可以继承父类的一切 //方法重写:在子类里面对父类的方法进行重写 //特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类 //override: 重写 //overload: 重载,编程多态 //parent::值名(); 放到那个需要调用父类的值名里面的(值),的子类里面! class Ren { public $name; function say() { echo $this->name."正在讲话!"; } } c

JavaScript Oriented[探究面向对象的JavaScript高级语言特性]

JavaScript Oriented 探究面向对象的JavaScript高级语言特性 Prologue . JavaScript Introduce 1.  JS Abstract JavaScript是由Netscape公司工程师Brendan Eich研发的脚本语言,经过推广和流行,兼容ECMA-262标准,至今用于描述HTML网页行为.(前端验证,检测,响应,触发,控制等动态行为) Knowledge Tree 2.     About Document 本文涉及到的概念有JavaScr

Python面向对象之类的封装、继承与多态

Python面向对象中类的三大特性,即封装.继承与多态,同时也是所有语言在面向对象编程中的重要特性,下面用实际的代码部分针对每一种特性做出说明. 一.封装 顾名思义,封装即把我们想要的内容封装到某个地方,因此在这里记录两个问题,一是如何封装.二是如何调用封装的内容. 1.封装数据 class Company:     def __init__(self, dept, leader):         self.dept = dept         self.leader = leader   

C#面向对象核心之二:继承

面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低了耦合. 但在实际应用中,有好多对象具有相同或者相似的属性,比如有一个对象 果树(FruitTree),它有成员属性叶子(Leaf),会开花(Flower),有树干(Stem),有树根(Root),它还会生长(Growth方法). 有另一个对象苹果树(AppleTree)它也是果树,具有果树所有特性,那么我们在编程的时候,定义了一个苹果树对象,假如再有一个桔子树(OrangeT

(一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承

一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法.相当于将“细节封装起来”,只 对外暴露“相关调用方法”. 通过前面学习的“私有属性.私有方法”的方式,实现“封装”.Python 追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现. 继承 继承可以让子类具有父类的特性,提高了代码的重用性. 从设计上是一种增量进化,原有父类设计不变的情况下,可以

Golang-面向对象编程三大特性-继承、多重继承

Golang-面向对象编程三大特性-继承 继承基本介绍和示意图 继承可以解决代码复用,让我们的编程更加靠近人类思维. 当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体(比如刚才的Student),在该结构体中定义这些相同的属性和方法. 其它的结构体不需要重新定义这些属性(字段)和方法,只需嵌套一个 Student 匿名结构体即可. [画出示意图] 也就是说:在 Golang 中,如果一个 struct 嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和