c++ --> 父类与子类间的继承关系
父类与子类间的继承关系
一、父类与子类
父类与子类的相互转换
class father{
//
};
class son : public father{
//
};
int main()
{
father f;
son s;
f = s;//正确
s = f;//错误 father *pf = new son;//正确
son *ps = new father;//错误 father &rf = s;//正确
father &rs = f;//错误
return ;
}
继承关系对基类成员的影响
公有成员 | 保护成员 | 私有成员 | |
公有继承 | 公有 | 保护 | 不可访问 |
保护继承 | 保护 | 保护 | 不可访问 |
私有继承 | 私有 | 私有 | 不可访问 |
成员函数 | 1 | 1 | 1 |
对象 | 1 | 0 | 0 |
子类 | 1 | 1 | 0 |
class father
{
public:
father(){cout<<"father construct"<<endl;}
~father(){cout<<"father delete"<<endl;}
};
class son : public father
{
public:
son(){cout<<"son construct"<<endl;}
~son(){cout<<"son delete"<<endl;}
};
int main()
{
son s;
return ;
}
输出:
father construct
son construct
son delete
father delete
2.如果是多重继承,基类的构造顺序按给定的顺序,析构反之
class father
{
public:
father(){cout<<"father construct"<<endl;}
~father(){cout<<"father delete"<<endl;}
};
class mother
{
public:
mother(){cout<<"mother construct"<<endl;}
~mother(){cout<<"mother delete"<<endl;}
};
class son : public father, public mother
{
public:
son(){cout<<"son construct"<<endl;}
~son(){cout<<"son delete"<<endl;}
};
int main()
{
son s;
return ;
}
输出:
father construct
mother construct
son construct
son delete
mother delete
father delete
3.利用基类的构造函数构造子类,效率更高
class father
{
int x;
public:
father(int a):x(a){cout<<"father construct:"<<x<<endl;}
};
class son : public father
{
int y;
public:
son(int a, int b):father(a), y(b){cout<<"son construct:"<<y<<endl;}
};
int main()
{
son s(, );
return ;
}
输出:
father construct:
son construct:
三、多重继承
1.多重继续的二义性,根本原因是
假如A有Test(),则B和C都有Test(),于是D产生了二义性
class A
{
public:
void Test(){cout<<"A"<<endl;}
};
class B
{
public:
void Test(){cout<<"B"<<endl;}
};
class C : public A, public B
{
};
int main()
{
C c;
c.Test(); //错误
c.A::Test(); //正确,输出:A
c.B::Test(); //正确,输出:B
return ;
}
2.编译器通常都是从离自己最近的目录树向上搜索的
子类的Test()覆盖了基类的Test(),并不代表基类的Test()消失,只是不能直接访问
class A
{
public:
void Test(){cout<<"A"<<endl;}
};
class B
{
public:
void Test(){cout<<"B"<<endl;}
};
class C : public A, public B
{
void Test(){cout<<"C"<<endl;}
};
int main()
{
C c;
c.Test(); //正确,输出:C
c.A::Test(); //正确,输出:A
c.B::Test(); //正确,输出:B
return ;
}
c++ --> 父类与子类间的继承关系的更多相关文章
- python的父类和子类中关于继承的不同版本的写法
Python 2.7中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar 类的定义类似于下面这样: class Car(object): def __init__(self, ...
- Java awt组件间的继承关系
Container的继承关系: Window是可独立存在的容器,其他则不行.
- PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...
- C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象
C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象 讲解目录: 1.各类在内存中的表现形式 备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提. 2.子类继承父 ...
- C++反汇编第三讲,反汇编中识别继承关系,父类,子类,成员对象
讲解目录: 1.各类在内存中的表现形式 备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提. 2.子类继承父类 2.1 子类中有虚函数,父类中有虚函数 : 都有的情况下 ...
- Python父类和子类关系/继承
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @File:继承_子类和父类的关系.py @E-mail:364942 ...
- java子类继承关系
1.java的类按照继承关系的树形结构所有的类其根节点都是object类,一个类有两种重要的成员,一是变量 .二是方法.子类继承不能继承父类中被声明为private的变量和方法. public cla ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...
随机推荐
- linux内核initrd文件自定义方法
linux内核initrd文件自定义方法 重新编译内核后,可能加入了自定义的模块,就有可能需要修改init文件,而init文件就在initrd中,这里记录下操作步骤,以防遗忘. 1. cp /bo ...
- MyEclipse报错
MyEclipse报错
- tar (child): jdk-7u71-linux-x64.tar.gz:无法 open: 没有那个文件或目录
1 错误描述 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm [sudo] password for youhaidong: youhaidong@y ...
- 芝麻HTTP:
只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理. 具体拼接代码如下: def process_item(self, ...
- Ajax前后台交互函数
function AJAX(obj){ //做网络请求的时候参数以对象的形式传递进来 //我们规定obj里面包含属性:url, //请求方式type, //date前端给后端传递的参数 //回调函数s ...
- HihoCoder - 1139
在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后终于准备出海捞船和敌军交战了.在这个游戏里面,海域是N个战略点(编号1..N)组成,如下图所示其中红色的点 ...
- AI CV 会议2018
(1) NIPS, Conference and Workshop on Neural Information Processing Systems, A类顶会 1987年由联结主义学派创建,每年一 ...
- [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
[翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能 原文: Comparing AWS Lambda performance of Node.js, ...
- 《C#图解教程》 总览
初识本书是在知乎,许多网友推荐它作为 C# 入门书籍. 本书的最大特点是插图丰富,许多复杂的概念,一副插图就解释得通透明了. 本书另外一个隐藏特性是作者有着 C/C++ 经验,书中经常提到它们与 C# ...
- position:absolute的发现。
使用.box{ width:100px; height:100px; background:red; position:absolute; left:0; right:0; top:0; bottom ...