c++子类继承父类的覆盖问题
2014-04-08 13:22
417 查看
废话少说,先看一段代码!
大家知道输出的结果是什么吗?结果是4和8(我的机子上int 是4个字节)!
这说明了什么?说明B中定义的val并不是覆盖了A中的val,而是继承了A的val,自己也另外定义了一个val。所以B的大小是两个int哈。这个可以测出成员变量的大小,所以知道是两份,那么下面呢?
可以判断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关系!
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关系!
相关文章推荐
- C++继承时子类父类同名成员变量的问题
- 【C++】子类在重写虚函数时,会覆盖父类的函数
- 有关java中子类覆盖父类的方法的返回值的问题
- 关于C++子类在继承父类的构造函数时的一些情况
- java类继承总结一 父类类型与子类类型之间的转化问题
- java中子类继承父类程序执行顺序问题
- 继承的顺序,子类覆盖继承父类的方法
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- 关于C++多重继承的时候虚函数覆盖的问题
- 关于java子类方法覆盖(Override)父类方法时,该子类方法返回值的问题
- 子类继承父类private属性问题
- C++多重继承子类和父类指针转换过程中的一个易错点
- public继承后,父类与子类访问隐藏 熟练c/c++(三)
- java中子类继承父类程序执行顺序问题
- 子类和父类构造函数的继承与覆盖问题
- java类继承总结一 父类类型与子类类型之间的转化问题
- 子类虚函数C++ 继承中子类与父类虚函数入栈顺序 及父类私有虚函数的调用方式
- c++ 父类和子类的继承
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- C++父类与子类关系以及函数重载、覆盖和隐藏规则 http://blog.csdn.net/xingyu19871124/article/details/7640131