C++学习笔记21 多态遇上对象数组
2014-09-08 15:18
423 查看
#include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; class Parent { protected: int i; public: virtual void f() { cout<<"Parent::f()"<<endl; } }; class Child: public Parent { protected: int j; public: Child(int i, int j) { this->i = i; this->j = j; } virtual void f() { cout<<"i = "<<i<<" "<<"j = "<<j<<endl; } }; int main(int argc, char** argv) { Parent* p = NULL; Child* c = NULL; Child ca[3] = { Child(1,2), Child(2,3), Child(3,4) }; p = ca; c = ca; /* 不要将多态应用于数组 ? 指针运算是通过指针的类型进行的 ? 多态通过虚函数表实现的 */ cout<<hex<<&ca[0]<<endl; cout<<sizeof(Parent)<<endl; cout<<hex<<&ca[1]<<endl; cout<<hex<<p+1<<endl; /* Parent占8个字节,Child占12个字节,指针运算是按照指针类型来运算的,p+1,即P+8个字节。而ca[0]与ca[1]相距12个字节 0x22feb4 8 0x22fec0 0x22febc i = 1 j = 2 i = 1 j = 2 i = 2 j = 3 */ p->f(); c->f(); p++; c++; //p->f(); c->f(); return 0; }
P++ ; 等价于 p = p+1;
p+1; (unsigned int )p + 1*sizeof(*p);
Parent占8个字节,Child占12个字节,指针运算是按照指针类型来运算的,p+1,即P+8个字节。而ca[0]与ca[1]相距12个字节
0x22feb4
80x22fec
00x22febc
i = 1 j = 2
i = 1 j = 2
i = 2 j = 3
所以不要在数组上使用多态!!!!
相关文章推荐
- JNI学习笔记 C++传递结构体、String、数组对象给JavaC++传递结构体、String、数组对象给Java
- boolan——c++学习笔记之多态对象模型
- C++学习笔记 数组对象
- C++学习笔记21,对象赋值
- C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量
- 《面向对象基础:C++实现》学习笔记之六
- 《面向对象基础:C++实现》学习笔记之四
- C++ 中的成员对象(学习笔记)
- Javascript学习笔记(二)Javascript核心之对象和数组
- Effective C++学习笔记:必须返回一个对象时不要试图返回一个引用
- C++学习笔记(6)——多重继承类对象的构造函数参数的传递方法
- 深入C++对象模型学习笔记 第3章 Data 语意学
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格
- 《面向对象基础:C++实现》学习笔记之三
- C++学习笔记(12)——多态与虚函数
- 《面向对象基础:C++实现》学习笔记之八
- 当多态遇上数组 ... [C++] (Rewritten)
- 当多态遇上数组 ... [C++] (Rewritten)
- C/C++学习笔记:指针与数组
- C++学习笔记(13)——利用对象、引用、指针调用虚函数