• c++子类继承父类的覆盖问题


    废话少说,先看一段代码!

    1 #include <iostream>
    2 #include <string>
    3 using namespace std;
    4 
    5 class A
    6 {
    7 public:
    8 int val;
    9 };
    10 class B:public A
    11 {
    12 public:
    13 int val;
    14 };
    15 int main()
    16 {
    17 cout << sizeof(A) << endl;
    18 cout << sizeof(B) << endl;
    19 return 0;
    20 }


    大家知道输出的结果是什么吗?结果是4和8(我的机子上int 是4个字节)!

    这说明了什么?说明B中定义的val并不是覆盖了A中的val,而是继承了A的val,自己也另外定义了一个val。所以B的大小是两个int哈。这个可以测出成员变量的大小,所以知道是两份,那么下面呢?

    1 class A
    2 {
    3 public:
    4 void fun()
    5 {
    6 cout << "A" << endl;
    7 }
    8 };
    9 class B:public A
    10 {
    11 public:
    12 void fun()
    13 {
    14 cout << "B" << endl;
    15 }
    16 };

    可以判断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关系!

  • 相关阅读:
    系统安全
    导出csv文件示例
    MsChart在MVC下的问题
    记录一些测试的结果
    使用CTE减少统计子查询
    otl获得sql出错位置(oracle)
    在sql语句中使用plsql变量
    Java经典编程题50道之二十四
    Java经典编程题50道之二十三
    Java经典编程题50道之二十二
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/3416429.html
Copyright © 2020-2023  润新知