c++子类继承父类的覆盖问题
废话少说,先看一段代码!
#include <iostream>
#include <string>
using namespace std; class A
{
public:
int val;
};
class B:public A
{
public:
int val;
};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
return ;
}
大家知道输出的结果是什么吗?结果是4和8(我的机子上int 是4个字节)!
这说明了什么?说明B中定义的val并不是覆盖了A中的val,而是继承了A的val,自己也另外定义了一个val。所以B的大小是两个int哈。这个可以测出成员变量的大小,所以知道是两份,那么下面呢?
class A
{
public:
void fun()
{
cout << "A" << endl;
}
};
class B:public A
{
public:
void fun()
{
cout << "B" << endl;
}
};
可以判断B中也有两份fun函数,这也就解释了B b;A a = b;a.fun()为什么输出"A"了,因为B有两份fun嘛,在执行 a = b的时候只是把B继承A的那份fun复制给了a,所以调用的时候是调用A的fun,输出"A"!
不过,最好不要像上面那样写A类和B类了。这样不符合public继承的is-a关系!
c++子类继承父类的覆盖问题的更多相关文章
- C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法
实现了父类继承接口,父类实例化接口的方法,子类继承父类,子类调用父类的方法直接使用 代码如下: using System; using System.Collections.Generic; usin ...
- python - class类 (五) 继承补充-子类继承父类属性/函数方法
子类继承父类属性/函数方法: #方式一:(原生方式,不建议使用) class Dongwu(object): def __init__(self,name,sex,old): self.name = ...
- @Inherited:允许子类继承父类的注解。
在看定义注解的相关文章的时候,看到这个@Inherited注解,简单的说明并没有真正搞懂是什么意思.在网上搜索了一些相关的内容,现在把一篇文章转载过来.以便后面使用. 文章出处,转载地址:(http: ...
- python 子类继承父类__init__(转载)
转载: http://www.jb51.net/article/100195.htm 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法 ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- python之子类继承父类时进行初始化的一些问题
直接看代码: class Person: def __init__(self): self.name = "jack" class Student(Person): def __i ...
- java子类继承父类的方法(代码简略版)
父类:public class Subjects { public void b() { System.out.println("学科"); } public void a(){ ...
- java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...
- java中子类继承父类什么?
1.继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包: 2.继承默认权限修饰符修饰的属性和方法,前提是子类和父类在同一个包.
随机推荐
- IOS-NSDateFormatter使用介绍
IOS-NSDateFormatter使用介绍 NSDateFormatter的使用: NSDate *nowDate = [[NSDate alloc] init]; NSDateFormatter ...
- linux device driver —— 字符设备
现在对linux设备驱动还没有什么认识,跟着书上敲了一个字符驱动,这里把代码贴一下. 测试环境是 Ubuntu 16.04 64bit 驱动程序: #include <linux/fs.h> ...
- iOS开发之支付宝集成
项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...
- 安装Visual Studio 2013 中文社区版
Visual Studio 2013 免费了,我收到邮件后,立即从邮件的下载连接安装了 Visual Studio Community 2013 with Update 4 . 安装后几天没打开,今天 ...
- Python:构建缓冲带提取区域平均坡度
前一段时间做提取坡度的问题,当时首先想到的是使用ArcEngine来做,因为记得有ITopoOperator接口可以构建缓冲带,用IExtractionRaster可以掩膜栅格数据,利用IPixelB ...
- Android中Cursor类的概念和用法
http://blog.sina.com.cn/s/blog_618199e60101fskp.html 使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android ...
- Datatables+Bootstrap
http://sandbox.runjs.cn/show/thwac3ec 运行效果 <!DOCTYPE html> <html lang="en"> &l ...
- C#入门经典(第五版)学习笔记(三)
---------------面向对象编程简介--------------- UML表示方法: 1)方框上中下三分 2)上框写类名 3)中框写属性和字段,例如:+Description:string ...
- Python:运算符
#!/usr/bin/python3 #运算符 #算术运算符 print("算术运算符:","+ - * / % **(幂) //(取整)") #比较运算符 p ...
- Java学习----this和super(在继承中)
public class Base { /*public Base() { System.out.println("Base 类的初始构造方法"); }*/ public Base ...