继承与派生定义及相关程序调用举例

一、面向对象程序设计的特点:抽象,封装,继承,多态性。

二、3种成员访问限定符及其继承关系:

问题:

private/protected限定符都是限定直接访问,那他们之间有什么区别?

解答:在本类中,private和protected作用是相同的,但是protected可以被继承,而private却不能。

三种继承关系下基类成员的在派生类的访问关系变化如下表所示:

总结:

1.基类的私有成员在派生类中是不能被访问的,如果一些基类成员不想被基类对象直接访问,但需要在派生类中能访问,就定义为保护成员。可以看出保护成员限定符是因继承才出现的。

2.public继承是一个接口继承,每个父类可用的成员对子类也可用,因为每个子类对象也都是一个父类对象。

3.protetced/private继承是一个实现继承,基类的部分成员并未完全成为子类接口的一部分,所以非特殊情况下不会使用这两种继承关系,在绝大多数的场景下使用的都是公有继承。

4.不管是哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员,但是基类的私有成员存在但是在子类中不可见(不能访问)。

5.使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式,在实际运用中一般使用都是public继承,极少场景下才会使用protetced/private继承.

三、继承和派生相关定义举例

类的继承:一个新类从已有的类那里获得其已有特性。

类的派生:从已有的类(父类)产生一个新的子类。

派生类是基类的具体化,基类是派生类的抽象。

继承的3种分类:

单继承:一个派生类只从一个基类派生。

多继承:一个派生类有两个或多个基类。

菱形继承:

声明派生类的一般形式:

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

{

派生类新增加的成员

}

例1.用公用继承方式,在程序中包括输入数据的函数,运行程序输入num,name,sex,age,addr的值,输出以上5个数据的值。

解:程序:

#include<iostream>

using namespace std;

class Student

{

public:

void get_value()//输入基类的3个私有成员的值

{

cin >> num >> name >> sex;

}

void display()//输出基类的3个私有成员的值

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

private:

int num;

char name[10];

char sex;

};

class Student1:public Student//定义公用派生类Student1

{

public:

void get_value_1()//函数的作用是输入5个数据成员的值

{

get_value();//调用函数,输入基类的3个私有数据成员的值

cin >> age >> addr;//输入派生类的两个私有数据成员的值

}

void display_1()//输出派生类的2个私有数据成员的值

{

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

private:

int age;

char addr[30];

};

int main()

{

Student1 stud1;//定义公用派生类Student1的对象stud1

stud1.get_value_1();//输入5个数据

stud1.display();//输出基类的3个私有数据成员的值

stud1.display_1();//输出派生类2个私有数据成员的值

system("pause");

return 0;

}

结果:

1111 yao M 20 xi‘an

num:1111

name:yao

sex:M

age:20

address:xi‘an

请按任意键继续. . .

例2.用私有继承方式,在程序中包括输入数据的函数,运行程序输入num,name,sex,age,addr的值,输出以上5个数据的值。

解:程序:

#include<iostream>

using namespace std;

class Student

{

public:

void get_value()

{

cin >> num >> name >> sex;

}

void display()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

private:

int num;

char name[10];

char sex;

};

class Student1:private Student//定义私有派生类Student1

{

public:

void get_value_1()

{

get_value();

cin >> age >> addr;

}

void display_1()

{

display();

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

private:

int age;

char addr[30];

};

int main()

{

Student1 stud1;

stud1.get_value_1();

stud1.display_1();//只需调用一次stud1.display_1()

system("pause");

return 0;

}

结果:

1111 yao M 20 xi‘an

num:1111

name:yao

sex:M

age:20

address:xi‘an

请按任意键继续. . .

例3.用保护继承方式,在程序中包括输入数据的函数,运行程序输入num,name,sex,age,addr的值,输出以上5个数据的值。

解:程序:

#include<iostream>

using namespace std;

class Student//声明基类

{

public://基类公用成员

void get_value();

void display();

protected://基类保护成员

int num;

char name[10];

char sex;

};

void Student::get_value()

{

cin >> num >> name >> sex;

}

void Student::display()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

class Student1:protected Student//声明一个保护派生类Student1

{

public:

void get_value_1();

void display_1();

private:

int age;

char addr[30];

};

void Student1::get_value_1()

{

get_value();

cin >> age >> addr;

}

void Student1::display_1()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

int main()

{

Student1 stud1;

stud1.get_value_1();

stud1.display_1();

system("pause");

return 0;

}

结果:

1111 yao M 20 xi‘an

num:1111

name:yao

sex:M

age:20

address:xi‘an

请按任意键继续. . .

四、继承与转换--赋值兼容规则:

1.子类对象可以赋值给父类对象,父类对象不能赋值给子类对象;

2.父类的指针/引用可以指向子类对象,子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)

五、继承体系中的作用域:

1.在继承体系中基类和派生类都有独立的作用域。

2.子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。(在子类成员函数中,可以使用 基类::基类成员 访问)--隐藏

注意:在实际中在继承体系里面最好不要定义同名的成员。

六、派生类的6个默认成员函数

时间: 2024-07-29 10:50:09

继承与派生定义及相关程序调用举例的相关文章

程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1

描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me take abcd qrst-abcd- 要 求:MyString类必须是从C++的标准类string类派生而来.提示1:如果将程序中所有 "My

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

------<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

C++奇淫技巧,程序员为啥天天学继承与派生,真的有这么难吗

继承与派生 1.1继承与派生的概念 在C++中,可重用性是通过继承这一机制来实现的.所谓继承,就是在一个已存在的类的基础上建立一个新的类.已存在的类称为基类,新建立的类成为派生类.(与对象的复制做区别)一个新类从已有的类那里获得其已有特性,这种现象称为类的继承. C++奇淫技巧,程序员为啥天天学继承与派生,真的有这么难吗派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整.创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交

android定义可以被其他程序调用的activity

在测试android调用其他应用的activity时,提示找不到对于的activity,经过检查发现在intent-filter的<category>中忘了写<category android:name="android.intent.category.DEFAULT"/>,自己定义的filter一定要写上这句,这是android默认添加的要求. android定义可以被其他程序调用的activity

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

Python(面向对象编程——2 继承、派生、组合、抽象类)

继承与派生 ''' 继承:属于 组合:包含 一. 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 继承有什么好处?最大的好处是子类获得了父类的全部功能. 继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构. 二. 组合指的是,在一个类中以另外一个类的对象作为数据属性,称

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

C++ 继承和派生 及 学生管理范例

1.概念 继承:在定义一个新的类B时,如果该类与某个已知类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为一个派生类(也称子类). 派生类是通过对基类进行修改和扩充得到的.在派生类中,可以扩充新的成员变量和成员函数. 派生类一经定义后,可以独立使用,不依赖于基类. 派生类拥有基类的全部成员函数和成员变量,不论是private,protected 还是 public 在派生类的各个成员函数中,不能访问基类中的private成员. 2.需要继承机制的例子 - 学生管理系统

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

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