12_顶层父类的创建

作者: 编程半岛 | 来源:发表于2018-01-21 20:35 被阅读4次

关键字:顶层父类、单一继承树、Object类的定义与实现

1. 当代软件架构实践中的经验

  • 尽量使用单重继承的方式进行系统设计

当用C++语言开发一个面向对象的系统时,不要使用多继承,使用单重继承实现多个接口的方式进行系统设计。重点强调可以使用多个接口,但是继承只能是一对一的继承,不要实现多重继承。

  • 尽量保持系统中存在单一的继承树

实现方式:创建一个顶层的抽象父类

  • 尽量使用组合关系代替继承关系

2. 不幸的事实

  • C++语言的灵活性使得代码可以存在多个继承树
  • C++没有官方的编译器,在不同的编译器的环境下使得同样的代码可能表现不同的行为

如:new操作失败会发生什么?
在早期的编译器中,new操作失败会返回一个空指针;
在现代的编译器中,new操作失败会抛出一个异常。

3. 创建DTLib::Object类的意义

  • 遵循经典设计准则,让所有数据结构都继承自顶层的Object类
  • 这样就规范了动态内存申请的行为,可以不使用编译器new的行为,自定义new的行为,保障了不同的编译器中行为的一致性,提高代码的移植性

4. 顶层父类的接口定义

class Object
{
public:
    void* operator new (unsigned int size) throw(); // throw()表示当前的函数不会抛出任何异常
    void operator delete (void* p);
    void* operator new[] (unsigned int size) throw();
    void operator delete[] (void* p);
    virtual ~Object() = 0;
};

5. 顶层父类的实现

Object.h

#ifndef OBJECT_H
#define OBJECT_H

namespace DTLib
{

class Object
{
public:
    void* operator new (unsigned int size) throw(); // throw()表示当前的函数不会抛出任何异常
    void operator delete (void* p);
    void* operator new[] (unsigned int size) throw();
    void operator delete[] (void* p);
    virtual ~Object() = 0;
};

void* Object::operator new (unsigned int size) throw()
{
    return malloc(size);
}

void Object::operator delete (void* p)
{
    free(p);
}

void* Object::operator new[] (unsigned int size) throw()
{
    return malloc(size);
}

void Object::operator delete[] (void* p)
{
    free(p);
}

Object::~Object()
{

}

}

#endif // OBJECT_H

6. 小结

  • Object类是DTLib中数据结构类的顶层父类
  • Object类用于统一动态内存申请的行为
  • 在堆中创建Object子类的对象,失败时返回NULL值
  • Object类为纯虚父类,所有子类都能进行动态类型识别

声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

相关文章

  • 12_顶层父类的创建

    关键字:顶层父类、单一继承树、Object类的定义与实现 1. 当代软件架构实践中的经验 尽量使用单重继承的方式进...

  • Java面向对象的总结 续

    首先创建一个父类,FatherBasic类。建立三个方法。 然后创建子类,继承父类。重写父类的方法。 意思是:父类...

  • OC -- 工厂模式

    创建父类:Cookie创建类: Factory创建子类:CookieC ; CookieR ; Cookies,继...

  • JavaScript继承四部曲

    四部曲:创建父类、创建子类、添加关系、修正子类原型 创建父类 创建子类 添加关系 修正子类原型

  • java重写toString和equals方法

    java重写toString和equals方法 java.lang.Object java 所有类的顶层父类 一个...

  • Java Object类

    Object 类 超类、基类,所有类的直接或间接父类,位于继承树的最顶层 任何类,如果没有 extends 显示继...

  • Python元类

    type() type(类名,(继承的父类1, 父类2,...),dict(类方法))可以动态创建类

  • 动态创建类

    //动态创建类- (void)createClass{ //创建类对[NSObject class]:父类,"ZF...

  • Java中的异常和处理详解

    简介 Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实...

  • 从 JDK 源码角度看 Object

    Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类。它包含了...

网友评论

    本文标题:12_顶层父类的创建

    本文链接:https://www.haomeiwen.com/subject/fpeqaxtx.html