《三种继承方式详解》

继承就是在一个已存在的类的基础上建立一个新类
第一次建立的那个类叫"基类"或"父类",新建立的类叫"派生类"或"子类"
 派生类从继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整
一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类
一个派生类不仅可以从一个类派生,也可以从多个基类派生
 
先通过一个例子来说明继承来建立派生类
class Student1:public Student
{
public:
void display()
{
cout << "age :" << age << endl ;
cout << "sddress :" << address << endl ;
}
private:
int age;
string address;
}; 


class后边的Student1是新建的类名。冒号后边的Student表示是已声明的基类
继承方式有三种:即公有继承,私有继承,保护继承
 
公有继承:基类的公有成员和保护成员在派生类中保持原有属性,其私有成员仍为基类私有
私有继承: 基类的公有成员和保护成员在派生类中成了私有成员,私有成员仍为私有成员
受保护的继承: 基类的公有成员和保护成员在派生类中成了保护成员,私有成员还是私有成员




公有继承(基类中的私有成员不能被派生类中的成员函数调用) 
一个关于访问公有基类的成员
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;
string name;
char sex;
};


class Stident1:public Student   //Student1为派生类 
{
public:
void display1()
{
cout << "num :" << num << endl ;//企图引用基类的私有成员,错误!!! 
cout << "name :" << name << endl ;//企图引用基类的私有成员,错误!!! 
cout << "sex :" << sex << endl ;//企图引用基类的私有成员,错误!!! 
cout << "age :" << age << endl ;//正确 
cout << "address :" << address << endl ; 
}
private:
int age;
string address;
}; 


私有成员


直接将上例转换成私有继承是这样的


class Student1:private Student  //私有继承 
{
public :
void display1()
{
cout << "age :" << age << endl ;
cout << "address :" << sddress << endl ;
}
private:
int age;
string sddress;
}; 


int main()
{
Student1 stu1;
stu1.display();  //错误,私有基类的公用成员函数在派生类中是私有函数 
stu1.display1(); //正确,dispay1函数是student1类的公用函数
stu1.age=18;     //错误,外界不能引用派生类的私有成员 
return 0;
}


虽然在派生类外不能通过派生类对象调用私有基类的公用成员函数
但可以 通过派生类的成员函数调用私有基类的公用成员函数(此时它是派生类中的私有成员函数,可以被派生类中的任何成员函数调用) 


上边的可以改写成
void display1()   //输出5个数据成员的值 
{
display(); //调用基类的公用成员函数,输出3个数据成员的值 
cout << "age :" << age << endl;//输出派生类的私有成员 
cout << "address :" << address << endl ;

main函数可以改写成
int main()
{
Student1 stud1;
stud1.display1();
return 0;



保护成员和保护继承


受保护的成员不能被类外访问,这一点和私有成员相似,可以人为保护成员对类的用户来说是私有的
从类的用户来讲,保护成员等价于私有成员。但有一点与私有成员不同
保护成员可以被派生类的成员函数调用


保护继承的特点:
保护基类的公用成员函数和保护成员在派生类中都成了保护成员,其私有成员仍为私有成员
如果需要在派生类中引用基类的某些成员,应当将基类的这些成员声明为protected,而不要声明为private


派生类中引用保护成员实例


#include<iostream>
using namespace std;
class Student
{
public:
void display();
protected:
int num;
string name;
char sex;
}; 


void Student::display()
{
cout << "num: " << num << endl ;
cout << "name: " << name << endl ;
cout << "sex: " << sex << endl ;
}


class Student1:protected Student  //用protected方式声明派生类Student1 
{
public:
void display1();
private:
int age;
string addr;
};


void Student1::display1()
{
cout << "num: " << num << endl ;
cout << "name: " << name << endl ;
cout << "sex: " << sex << endl ;
cout << "age: " << age << endl ;
cout << "address: " << addr << endl ; 



int main()
{
Student1 stu1;
stu1.display1();
//stud1.num=10023  //错误,外界不能访问保护成员 
return 0; 
}缺少输入数据成员函数,自己补全*/


注意:在程序中通过派生类Student1的对象stud1的公用成员函数display1去访问基类的保护成员
num,name,sex,不要误认为可以通过派生类对象去访问基类的保护成员


多极派生时的访问属性


先声明以下类
class A
{
public:
int i;
protected:
void f2();
int j;
private:
int k;
};


class B:public A  //public方式 
{
public:
void f3();
protected:
void f4();
private:
int m;
};


class C:protected B //protected方式 
{
public:
void f5();
private:
int n;
};


类A是类B的公用基类,类B是类C的保护基类
本程序的具体分析见P387 


无论是哪种继承方式,在派生类中都不能访问基类的私有成员,私有成员只能被本类的成员函数所访问
计算机网络期末复习题 201708-201801计算机网络复习指导发布-校考学生!!下载截止于12.5日晚上9点 2017-12-04 23:07 计算机网络复习指导-校内考试 §1.名词解释: 1. 计算机网络 2.网络体系结构 3.高速以太网 4.静态路由选择 5. 动态路由选择 6.子网掩码 8.动态主机配置协议 9.套接字 10.客户/服务器模型(C/S模型) 11.域名系统(DNS) 12.光纤分布式数据接口FDDI §2.简答题: 1.试谈你对网络安全的威胁和防病毒技术的认识。(线下教学课件) 2.简述物理层的四个特性。(线下教学课件) 3.计算机网络的组成(P2-P3) 4.计算机网络的功能(P3) 5.计算机网络标准化的相关组织(P4+线下教学课件) 6.计算机网络的性能指标(P8+线下教学课件) 7.简述你所知道的网络传输介质(P33-34) 8.物理层的四个特性(P34) 9.简述四种帧边界的划分方法(即组帧方法)。(P52-54+线下教学课件) 10.简述停止-等待流量控制(协议)。(P59+P62-P64+线下教学课件) 11.简述时分多路复用(P69+线下教学课件) 12.简述频分多路复用(P68+线下教学课件) 13.简述IPv4地址的分类(P122-123) 14.UDP数据报与IP分组的区别(P187) §3.论述题: 1.试说明数据链路层原语和协议的转换。(线下教学课件) 2.描述常规释放的过程,并画出其示意图。(线下教学课件) 3.奈奎斯特定理公式和香农定理公式的主要区别是什么? 4.试比较电路交换、报文交换和分组交换等三种数据传输方式。(P27-29) 5.谈谈你对差错控制方法的理解。(P54-58+线下教学课件) 6.谈谈域名解析过程(P225-226) 7.ARP和DNS是否有些相似?它们有何区别?(P227) 8.FTP的工作原理。(P228)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值