父类与子类指针的问题

  1 /* 父类与子类指针的问题 */
  2 
  3 
  4 #include<iostream>
  5 
  6 using namespace std;
  7 
  8 class ye
  9 {
 10 public:
 11     ye()
 12     {
 13         this->p = new int[25*1024*1024]
 14         cout << "ye create" << endl;
 15      }
 16 
 17     ~ye()
 18     {
 19         cout << "ye delete" << endl;
 20         delete []p;
 21     }
 22     
 23     void yeye()
 24     {
 25         cout << "我是你爹" << endl;
 26     }
 27 
 28     void print()
 29     {
 30         cout << typeid(*this).name() << endl;
 31         cout << sizeof(*this) << endl;
 32     }
 33 
 34     int *p;
 35 };
 36 
 37 
 38 
 39 class die : public ye
 40 {
 41 public:
 42     die()
 43     {
 44         this->p = new double[25*1024*1024]// int 4字节  4*25=100 * 1024 *1024 = 100M
 45         cout << "die create" << endl;
 46     }
 47 
 48     ~die()
 49     {
 50         cout << "die delete" << endl;
 51         delete []p;
 52     }
 53 
 54     void diedie()
 55     {
 56         cout << "我是你儿子" << endl;
 57     }
 58 
 59     void print()
 60     {
 61         cout << typeid(*this).name() << endl;
 62         cout << sizeof(*this) << endl;
 63     }
 64 
 65 private:
 66     double *p;
 67 };
 68 
 69 /*
 70     父类指针引用父类对象,完全正常引用
 71     子类指针引用子类对象,子类会覆盖父类的同名函数 覆盖同名变量
 72     父类指针引用子类对象,只能访问子类对象中包含的父类对象,父类对象的函数成员可以访问,子类的不可以访问,无法正常释放内存
 73     子类指针引用父类对象,不可以,会出现野指针内存冲突
 74 */
 75 void main()
 76 {
 77     // ye *p = new ye;  100M
 78 
 79     // die *p = new die;// 300M
 80 //---------------------------------------
 81     // 父类指针引用父类对象
 82     ye *p = new ye;
 83     p->yeye();
 84     p->print();
 85     cout << (void *)p->p << endl;
 86     delete p;
 87 //---------------------------------------
 88     // 子类指针引用子类对象
 89     die *p = new die;
 90     p->diedie();
 91     p->print();
 92     p->ye::print();
 93 
 94     cout<< (void *)p->p << endl;
 95     cout << (void *)p->ye::p << endl;
 96     delete p;
 97 //---------------------------------------
 98     //父类指针引用子类对象
 99     ye *p = new die;//父类指针存储子类对象,不需要转换
100     p->print();
101     p->diedie();// 不可以访问
102     delete p;
103 
104 //---------------------------------------
105     // 子类指针引用父类对象
106     die *p =static_cast<die*>(new ye);// 子类对象指针必须强制转换
107     p->print();// 函数区是共享的,空指针可以访问不引用成员变量的函数
108     cout<< (void *)p->p << endl;// 没有初始化的野指针
109     //delete p->p;// 崩溃
110     p->ye::print();// 访问父类对象可以通过指针->父类::方法或者成员
111     p->yeye();
112     //delete p;// 出现野指针释放内存失败 会崩溃
113     
114 
115     cin.get();
116 }

 

posted on 2015-06-09 19:08  Dragon-wuxl  阅读(145)  评论(0)    收藏  举报

导航