C++面向对象编程分享05----20160326_李楚煌
来源:互联网 发布:ucloud vs 阿里云 编辑:程序博客网 时间:2024/05/16 10:07
#ifndef __FRUIT_H__#define __FRUIT_H__ #include <iostream>#include <malloc.h>using namespace std;class Fruit {int no;double weight;char key;public:Fruit() { cout << "default Fruit ctor.this = " << this << endl; }virtual ~Fruit() { cout << "Fruit dtor.this = " << this << endl; }virtual void process() { }void print() { }};class Apple: public Fruit {int size;char type;public:Apple() { cout << "default Apple ctor.this = " << this << endl; }virtual ~Apple() { cout << "Apple dtor.this = " << this << endl; }virtual void process() { }void save() { }static void* operator new(size_t size);static void operator delete(void* ptr, size_t size);};inlinevoid* Apple::operator new(size_t size) {if (Apple* ptr = (Apple*)malloc(size)) {cout << "Apple::new(), size = " << size << ", return: " << ptr << endl; return ptr;} else {throw bad_alloc();}}inlinevoid Apple::operator delete(void* ptr, size_t size) {cout << "Apple::delete(), ptr = " << ptr << ", size = " << size << endl;free(ptr);} #endif //fruit.h
#include "fruit.h"#include <iostream>using namespace std;int main() {Fruit f;cout<<endl;cout<<"-----------------------------00"<<endl;Apple d;cout<<endl;cout<<"-----------------------------01"<<endl;{Fruit *p = new Fruit();delete p;}cout<<endl; cout<<"-----------------------------02"<<endl;{Fruit *p = new Apple();delete p;}cout<<endl;cout<<"-----------------------------03"<<endl;{Fruit **p = new Fruit*[2];for(int i=0; i<2; ++i){p[i] = new Apple();}cout<<endl;cout<<"-----------------------------0301"<<endl;for(int i=0; i<2; ++i){delete p[i];}cout<<endl;cout<<"-----------------------------0302";delete p;}cout<<endl;return 0;}
子类创建的时候,先默认构造父类,在构造子类:
当用父类作指针,创建子类时,出现
New的时候直接New子类,指针作父类,它们的地址都是一样的。
析构时先析构子类,再析构父类。
这是数组指针,同样也是先构造子类:
释放数组堆空间:
顺道释放栈空间(栈heap会自动释放,栈stack要动手释放):
1 0
- C++面向对象编程分享05----20160326_李楚煌
- C++面向对象编程分享----20160301_李楚煌
- C++面向对象编程分享02----20160311_李楚煌
- C++面向对象编程分享03----20160317_李楚煌
- C++面向对象编程分享04----20160322_李楚煌
- C++面向对象编程分享06----20160404_李楚煌
- C++面向对象编程分享07----20160407_李楚煌
- C++面向对象编程分享08----20160422_李楚煌
- C++面向对象编程分享09----20160429_设计模式_李楚煌
- 面向对象_链式编程
- 013_《Delphi面向对象编程思想》
- 黑马程序员_面向对象编程初步
- 黑马程序员_面向对象编程
- 黑马程序员:Java编程_面向对象
- 学习笔记_面向对象编程
- python基础八_面向对象编程
- C语言面向对象编程
- C语言面向对象编程
- Aspectj很强大啊
- 初识RxJava(入门篇)
- ListView的下拉刷新和上拉加载
- Python入门 之 列表生成式
- 面向对象基础——引用传递及其应用以及this关键字的使用
- C++面向对象编程分享05----20160326_李楚煌
- 白帽、黑帽SEO和灰帽seo的关系
- (p231)15.5-4最优二叉搜索树(n^2和n^3)
- 2012年的Android之旅:梦想、学习、坚持、自信、淡定
- Go语言学习(六)函数
- 虚幻4:有关渲染宏的解释。
- 锁与并发
- 浅谈Mental Ray渲染引擎并行性机制
- 黑帽SEO技术和白帽SEO技术有什么区别?