精华内容
下载资源
问答
  • Qt 元对象系统

    千次阅读 2021-05-02 16:53:35
    什么是 Qt 元对象系统 Qt 的元对象系统(Meta-Object System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。 元对象系统由以下三个基础组成: QObject 类,是所有使用元对象系统的类的基类。...

    作者:billy
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    什么是 Qt 元对象系统

    Qt 的元对象系统(Meta-Object System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统

    元对象系统由以下三个基础组成:

    1. QObject 类,是所有使用元对象系统的类的基类。换句话说只有继承 QObject 才能使用元对象系统;
    2. Q_OBJECT 宏,在一个类的 private 部分声明 ,使得类可以使用元对象的特性,如动态属性、信号与槽;
    3. MOC(元对象编译器),为每个 QObject 的子类提供必要的代码来实现元对象系统的特性。构建项目时,MOC 工具读取 C++ 源文件,当它发现类的定义里有 Q_OBJECT 宏时,它就会为这个类生成另外一个包含有元对象支持代码的 C++ 源文件,这个生成的源文件连同类的实现文件一起被编译和连接。通常这个新的C++原文件会再以前的C++原文件前面加上moc_作为新的文件名;

    元对象系统的功能

    除了提供在对象间通讯的机制外,元对象系统还包含以下几种功能:

    1. QObject::metaObject()方法,获得与一个类相关联的meta-object;
    2. QMetaObject::className()方法,在运行期间返回一个对象的类名,不需要本地C++编译器的 RTTI(run time type information)支持;
    3. QObject::inherits()方法,用来判断一个对象的类是不是从一个特定的类继承而来;
    4. QObject::tr()、QObject::trUtf8()方法,为软件的国际化翻译字符串;
    5. QObject::setProperty()、QObject::property()方法,根据属性名动态的设置和获取属性值;
    6. QMetaObject::newInstance()方法,构造类的新实例;
    7. 使用 qobject_cast()方法可以在在 QObject 类之间提供动态转换,qobject_cast()方法的功能类似于标准 C++ 的 dynamic_cast(),但是 qobject_cast() 不需要RTTI的支持。在一个 QObject 类或者它的派生类中,如果不定义 Q_OBJECT 宏,那么这些功能将不能被使用。从 meta-object 的观点来看,一个没有定义 Q_OBJECT 宏的类与它最接近的那个祖先类是相同的。那么 QMetaObject::className() 方法返回的名字并不是该类的名字,而是与它最近接的那个祖先类的名字。所以,任何从 QObject 继承的类都必须定义 Q_OBJECT 宏

    Meta Object 的所有数据和方法都封装在 QMetaObject 类中,它包含一个 Qt 类的 meta 信息,并且提供查询功能。meta 信息包含:

    1. 信号表(signal table),与对应 Qt 类相关的系统定义及自定义的 signal 的名字;
    2. 槽表(slot table),与对应 Qt 类相关的系统定义及自定义的 slot 的名字;
    3. 类信息表(class info table),Qt 类的类型信息;
    4. 属性表(property table),与对应类中的所有属性的名字;
    5. 指向 parent meta object 的指针;

    Q_OBJECT 宏的定义

    Q_OBJECT 定义在 /src/corelib/kernel/Qobjectdefs.h 文件中,Q_OBJECT 宏的定义如下:

    #define Q_OBJECT \
    public: \
        Q_OBJECT_CHECK \
        static const QMetaObject staticMetaObject; \
        Q_OBJECT_GETSTATICMETAOBJECT \
        virtual const QMetaObject *metaObject() const; \
        virtual void *qt_metacast(const char *); \
        QT_TR_FUNCTIONS \
        virtual int qt_metacall(QMetaObject::Call, int, void **); \
    private: \
        Q_DECL_HIDDEN static const QMetaObjectExtraData staticMetaObjectExtraData; \
        Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
    

    QMetaObject 类型的静态成员变量 staticMetaObject 是元数据的数据结构。metaObject,qt_metacast,qt_metacall、qt_static_metacall 四个虚函数由 MOC 在生成的 moc_xxx.cpp 文件中实现。
    1)metaObject 的作用是得到元数据表指针;
    2)qt_metacast 的作用是根据签名得到相关结构的指针,返回void*指针;
    3)qt_metacall 的作用是查表然后调用调用相关的函数;
    4)qt_static_metacall 的作用是调用元方法(信号和槽);

    元对象编译器 MOC

    1. MOC 的功能
      1)处理 Q_OBJECT 宏和 signals/slots 关键字,生成信号和槽的底层代码;
      2)处理 Q_PROPERTY() 和 Q_ENUM() 生成 property 系统代码;
      3)处理 Q_FLAGS() 和 Q_CLASSINFO() 生成额外的类 meta 信息;
      4)不需要 MOC 处理的代码可以用预定义的宏括起来,如下:
    #ifndef Q_MOC_RUN
    …
    #endif
    
    1. MOC 的限制
      1)模板类不能使用信号/槽机制;
      2)MOC不扩展宏,所以信号和槽的定义不能使用宏, 包括 connect 的时候也不能用宏做信号和槽的名字以及参数;
      3)从多个类派生时,QObject 派生类必须放在第一个。 QObject(或其子类)作为多重继承的父类之一时,需要把它放在第一个。 如果使用多重继承,MOC 在处理时假设首先继承的类是 QObject 的一个子类,需要确保首先继承的类是 QObject 或其子类;
      4)函数指针不能作为信号或槽的参数, 因为其格式比较复杂,MOC 不能处理。可以用typedef 把它定义成简单的形式再使用;
      5)用枚举类型或 typedef 的类型做信号和槽的参数时,必须 fully qualified。这个词中文不知道怎么翻译才合适,简单的说就是,如果是在类里定义的,必须把类的路径或者命名空间的路径都加上, 防止出现混淆。如 Qt::Alignment 之类的,前面的 Qt 就是 Alignment 的 qualifier;
      6)信号和槽不能返回引用类型;
      7)signals 和 slots 关键字区域只能放置信号和槽的定义,不能放其它的如变量、构造函数的定义等,友元声明不能位于信号或者槽声明区内;
      8)嵌套类不能含有信号和槽 ;

    2. 自定义类型的注册
      Qt 线程间传递自定义类型数据时,自己定义的类型如果直接使用信号槽来传递的话会产生下面这种错误:
      QObject::connect: Cannot queue arguments of type 'XXXXX' (Make sure 'XXXXX' is registed using qRegisterMetaType().)

    错误原因:当一个 signal 被放到队列中(queued)时,参数(arguments)也会被一起放到队列中,参数在被传送到 slot 之前需要被拷贝、存储在队列中;为了能够在队列中存储参数,Qt 需要去 construct、destruct、copy 参数对象,而为了让 Qt 知道怎样去作这些事情,参数的类型需要使用 qRegisterMetaType 来注册;

    注册自定义类的步骤如下:
    1)自定义类型时在类的顶部包含:#include ;
    2)在类型定义完成后,加入声明:Q_DECLARE_METATYPE(XXX);
    3)在 main() 函数中注册自定义类类型:qRegisterMetaType(“XXX”),如果希望使用类型的引用,同样要注册:qRegisterMetaType(“XXX&”);

    展开全文
  • QT中的 元对象系统

    千次阅读 2019-02-20 15:40:13
     QT中的 元对象系统(Meta-Object System)提供了对象间通信的信号槽机制、运行时类型信息和动态属性属性系统,元对象系统是基于以下三个条件的:  1、该类必须继承自Qobject类  2、必须在类的私有声明区声明Q_...

    -------摘自《QtCreator快速入门   霍亚飞 编著》

      QT中的 元对象系统(Meta-Object System)提供了对象间通信的信号槽机制、运行时类型信息和动态属性属性系统,元对象系统是基于以下三个条件的:

       1、该类必须继承自Qobject类

        2、必须在类的私有声明区声明Q_OBJECT宏(在类定义的时候,如果没有指定public,则默认为private)

        3、 元对象编译器Meta-Object Compiler(moc)为 QObject的子类实现元对象 特性提供必要的代码

    其中moc 工具读取一个C++ 源文件,如果他发现一个或者多个类的生命中包含Q_OBJECT宏,则会创建另外一个C++源文件(就是在项目目录中的debug目录下看到的以moc为开头的C++源文件),其中包含了为每个类生成的元对象代码。这些产生的 源文件或者被包含进类的源文件中,或者和类的实现同时进行编译和链接。在QtQucik核心编程中写道(同样也适用其他非直接或者间接继承自 QObject类的外部库类):

    元对象系统主要是为了实现信号和槽机制才被 引入的,不过除了信号槽机制意外,它还支持一些其他的特性。(以后看到更深的内容 再回来补充)

    展开全文
  • 解析Qt元对象系统(一) 概述

    千次阅读 2018-07-21 10:53:12
    Meta-Object System 提供了Qt的信号和槽机制以及对象之间的互相通信,运行时的信息和动态属性系统。 三个必要条件: 1. QObject的子类 2. 宏Q_OBJECT 3. Meta Object Compiler Qt官方建议对自定义的QObject子类...

    Meta-Object System 提供了Qt的信号和槽机制以及对象之间的互相通信,运行时的信息和动态属性系统。

    三个必要条件:
    1. QObject的子类
    2. 宏Q_OBJECT
    3. Meta Object Compiler

    Qt官方建议对自定义的QObject子类都要加这个宏,但要注意:某些类不是继承自QObject,这些类里加Q_OBJECT就会出错,例如QEvent,QGraphicsItem,QRunnable.

    MOC的实现是一个预处理器,使用MOC的方式,所有平台上的标准的C++编译器都能支持Qt。从而不需要实现一个新的跨平台的Qt编译器。moc是为了解决反射的问题,但是一些动态的编程语言(如Python,Ruby等)中,语言本身自带反射功能。Qt程序之所以编译速度慢,主要是因为在 Qt 将源代码交给标准C++编译器,如gcc之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。

    如果工程是用qmake生成Makefile进行编译,那么其中就包含了调用moc的规则,我们不必直接使用moc.exe。moc.exe会读取头文件,查看是否有Q_OBJECT宏定义,如果有则根据这个头文件生成相应的moc_.cpp,该文件同样将进入编译系统,最终被链接到二进制代码中去,QtCreator生成的代码就是通过编译链接时,把moc_widget.o与其他目标文件链接到一起,这种方式不用改源代码,相对而言比较顺眼。

    moc_.cpp主要实现了头文件中的Q_OBJECT宏和SIGNAL,也就是将Qt扩展的语法去掉,再交给C++编译器。
    SIGNAL只在头文件做声明,但我们写Qt程序时从不进行实现,因为它是在moc_.cpp里实现的,
    例如无参数信号void Text();的实现:

    void MainWindow::Text()
    {
        QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
    }

    有参数信号void time(QDateTime t);的实现:

    void MainWindow::time(QDateTime _t1)
    {
        void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
        QMetaObject::activate(this, &staticMetaObject, 1, _a);
    }

    主要调用QMetaObject::activate方法,staticMetaObject是这个类默认的一个静态元对象。第三个参数是信号对应的序数。第四个参数如果是nullptr则代表信号无参数,否则代表参数的指针。

    moc文件也可以在cpp文件中被include,Qt官方示例很多就是这样做的,我们也可以这样写常见的MainWindow程序:

    #include <QApplication>
    #include <QMainWindow>
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    public:
        explicit MainWindow(QWidget *parent=0):
            QMainWindow(parent)
        {}
        ~MainWindow()
        {}
    };
    
    #include "main.moc"
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow m;
        m.resize(800,600);
        m.show();
        return a.exec();
    }

    编译之前先运行qmake,以处理宏Q_OBJECT,生成main.moc。如果没有#include "main.moc",会报错:
    无法解析3个外部符号,即moc文件中实现的3个函数:qt_metacall, qt_metacast, metaObject

    元对象系统涉及到的类: QMetaType, QMetaMethod, QMetaObject, QMataClassInfo, QMetaEnum, QMetaDataReaderControl, QMetaProperty,

    QMataType是Qt所支持的元类型,有个Type的枚举,这个枚举列表中的所有类型是Qt信号槽机制本身就支持的,大部分的类型实际在宏QT_FOR_EACH_STATIC_TYPE中包含。如果是自定义的类型需要用qRegisterMetaType去注册元类型才能被Qt的信号槽所识别。

    QMetaMethod有个重要的成员函数invoke,支持跨线程调用,是基于元对象系统的。

    QMetaObject是元对象类本身,实现了QMetaObject::invokeMethod, 功能和QMetaMethod没有什么区别。提供了元对象系统的基本方法,包括方法/信号槽/属性的数目/序数等等方法。

    QMataClassInfo提供了类的附加信息。

    元对象系统的一些常用工具:

    • QObject::metaObject(),返回当前类的元对象信息,是个QMetaObject指针;QObject::staticMetaObject也可以获取当前类的元对象信息,类型是QMetaObject。
    • QMetaObject::className(),运行时返回类名,返回类型是char*。
    • QMetaObject::newInstance(),构造一个新的实例。
    • QObject::inherits(),判断当前对象实例的类继承关系,常用于判断某个对象属于哪个类。
    • QObject::tr() 和QObject::trUtf8()用于Qt语言国际化,返回类型是QString。
    • QObject::property()/setProperty(),通过属性名动态获取/修改属性值。
    • qobject_cast(),动态类型转换,类似于标准C++的dynamic_cast(),不同的是它不需要RTTI(run time type information)且不受动态库的限制。
    展开全文
  • Qt元对象系统解析(一)

    万次阅读 多人点赞 2016-05-06 15:43:17
    说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大。这也是大家讲Qt就必须将信号与槽,讲信号与槽就要讲Qt的元对象系统。当然初学者知道怎么用就OK啦,当然随着你写的代码越多,接触的平台越多的时候,你就会...

    说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大。这也是大家讲Qt就必须将信号与槽,讲信号与槽就要讲Qt的元对象系统。当然初学者知道怎么用就OK啦,当然随着你写的代码越多,接触的平台越多的时候,你就会好奇Qt是如何把两个(多个)任意不相关(必须都继承与QObject)的对象联系在一起的。我们围绕一些问题来认识一下Qt元对象系统:

    • 什么是Qt元对象系统,它包含了哪些内容,它在我们的程序中做了什么?
    • moc工具是什么,Q_OBJECT宏是什么?
    • 元对象系统如何工作在Qml、C++、Javvascrip的混合编程的?
    • 信号与槽机制、Qt事件机制、MFC消息机制三者的区别是什么?
    • 信号与槽在单线程与多线程中是如何工作的?
    • 如何在信号与槽机制中,传递自定义类型参数?
      什么是Qt元对象系统
      元对象系统是一个基于标准C++的扩展,为Qt提供了1、信号与槽机制2、实时类型信息3、动态属性系统。
      这个元对象主要基于三个东西:

    • Object类。大家都知道QObject类是Qt的核心类,很多Qt类都是由它继承而来,那它具体到底是什么东西呢?我们一起去看下Object的Detail Description我们一起来趴一下它的主要特性:
      (1)它是对象模型的核心,信号与槽是基于对象模型的(两个对象的连接),而它是对象模型的核心。体现在我们常用的QObject::connect()函数上,我们后面会分析这个conncet()源码,趴一下它是怎么工作的。
      (2)对象的组织方式以树形结构的。这也就是Qt框架那章Core模块的一个特性“树形对象模型”。我们常用相关的函数体现在QObject::setParent()、QObject::findChild()、QObject::findChilren()这几个函数上。这种树形结构保持了众多对象之间的严密的父子、逻辑关系。
      (3)每一个对象都有一个独立的名字,并且可以查出该对象的继承关系。这些对象不同的名字是我们使用findChild()函数的关键,也是我们在Qml、C++混合编程时的关键。这里QObject有这个属性,并不是它自己实现的,是QMetaobject帮助实现的,QMetaObject是设置这些属性规则,并建立对象们之间的关系的关键。(每个人都有自己名字手机QQ,但是你们怎么相互联系呢,它就是帮助建立通讯录)
      (4)对象在销毁时会发出一个信号。这里没什么好多说的。
      (5)添加安装事件过滤器。让对象接受或者不接受某些事件以及事件的处理。我们常用到的有mouseEvent()、timeEvent(),在某些没有继承Object类中是不能使用这些函数的,如QGraphicsItem以及它派生出来的其他图元类。后面我们会讲事件与信号槽的区别。
      前面(1)(2)(3)是Object与元对象系统紧密联系的属性,其他属性大家可以去看看帮助文档扒一扒,小白英文太烂。到这里你只要明白为什么元对象非要和QObject相关就行啦。

    • Q_OBJECT。简单理解就是一些宏定义代码,就是你们自己定义的一些类、类的信号、槽函数、(Qml混合编程的属性、自己注册的Qt数据类型等)这么多属性,怎么保存到通讯录里面呢?就是通过这个宏定义的函数,帮助你们实现的,后面会结合moc文件讲解这个函数是做什么的。
    • moc(Meta-Object-Compiler)元对象编译器,从概念上和其他编译器一样来理解就好了。signals、slots关键字并不是标准C++里面的东西,代码最后要交给C++编译器,那么就需要把这部分转化成C++编译器认识的东西,这个工作就是moc来完成了。这里需要注意的是,moc过程是发生在预编译之前的,简单说就是moc之后每一个包含Q_OBJECT宏头文件,都会根据该头文件里面的signals、slots、Q_MENU l来生成以moc_XXXX(自定义类名)的.cpp文件,我们常用IDE的构建生成的.o文件,就是最终的目标文件(包含moc生成的cpp)。这个中间生成用qamke生成Makefile可以清楚的看到编译文件的连接情况。后面讲Qt工程的时候会讲解Makefile。这里大家想要理解moc更多的使用规则,帮助里面输入moc查看帮助文档,这里推荐也个中文翻译版(小白英语实在太烂)http://www.kuqin.com/qtdocument/moc.html
      其实大家都知道这三个基本原则,小白在这里也碰到一个疑问,在《零基础学Qt4编程》里面说moc在生成cpp文件的同时,也会生成头文件XXXX.moc.h格式,很显然小白是没有这个文件的,在帮助里看到的也是read a C++ source file。C++编译器在预编译处理过程中就是处理头文件,如果Qt没有转换头文件,C++编译器怎么认识signals、slots这样的关键字呢?在此不知道有没有熟悉编译原理里的大牛给小白普及一下。
      元对象系统除了提供信号与槽(communication between objects ,the main reason for introducing the system。主要特性)。我们常用的国际化QObject::tr()、qsTr()还有常用的QObject::setProperty()、QObject::property()。

      到这里我们大致的理解开始我们提出问题的前三个,每个object都有自己的name,这是我们混合编程的前提,至于它是怎么查找的我们下一节来扒。

    展开全文
  • QT的元对象系统(Meta-Object System)

    千次阅读 2015-09-24 16:05:26
    QT的元对象系统为对象间的通信提供信号槽机制,运行时的类型信息和动态的属性系统。 元对象系统建立在以下三个基础之上: 1、QObject 类作为基类,使其它的对象能够利用元对象系统。 2、类内部私有部分声明的 Q_...
  • Qt 元对象系统(Meta-Object System)

    万次阅读 2010-04-17 15:53:00
    Qt 元对象系统(Meta-Object System)Qt的元对象系统基于如下三件事情:1. 类:QObject,为所有需要利用原对象系统的对象提供了一个基类。2. 宏:Q_OBJECT,通常可以声明在类的私有段中,让该类可以使用元对象对象的...
  • 【QT】什么是Qt元对象系统

    千次阅读 2015-01-15 17:45:29
    Qt元对象系统,即meta object system(mos),提供了大家熟知的用于对象间信息传递的信号与槽机制,运行时类型信息和动态属性系统。 mos基于三件法宝: 一是QObject类,是所有Qt对象的基类,可以很好的使用mos。 二...
  • 1.Qt的元对象与标准C++中对象的区别 ...Qt中的元对象系统和标准C++系统的区别有哪些? 1.支持对象间使用信号和槽的机制进行通信 2.动态对象转化 3.可查询可设计的对象属性 4.层次结构可查询的对
  • Qt的元对象(Meta-Object)系统简介

    千次阅读 2016-11-12 21:51:46
    Qt的元对象(Meta-Object)系统简介
  • 元对象系统涉及很多方面,比如运行时类信息,属性信息,信号槽等等,但是其中最主要的应该是信号槽,大家也许在处理信号槽的时候都碰到过这么一个问题:为什么我没加Q_OBJECT宏,信号槽就生效不了呢?进入正题:#...
  • 这也是大家讲Qt就必须将信号与槽,讲信号与槽就要讲Qt的元对象系统。当然初学者知道怎么用就OK啦,当然随着你写的代码越多,接触的平台越多的时候,你就会好奇Qt是如何把两个(多个)任意不相关(必须都继承与...
  • Qt元对象系统和模板机制的冲突

    千次阅读 2013-06-07 18:51:24
    Qt元对象系统是对为了Qt对象类型和信号与槽机制引进的,Qt的工具包中有一个元对象编译器,它是为支持Qt元对象系统而产生一些额外C++代码,这些编码会和源码一起被标准的C++编译器编译,因为Qt的这一套标准是不支持的...
  • QT中元对象系统(MOC)原理

    千次阅读 2013-08-06 09:59:12
    元对象系统这样工作: ●  Q_OBJECT宏声明一些内省函数(metaObject(),TR(),qt_matacall()和少量其他的函数)。这些函数必须在所有的QObject的子类中被实现。 ●  Qt的moc工具负责执行被Q_OBJECT宏声明的...
  • 是用宏来静态定义的,在QT中的元对象系统中并不知道在运行时怎么创建和销毁我们的自定义的对象。我将在后一章讲解我们自定义的类型完全用在信号-槽的通 讯机制中的做法。 这是Message的实现代码: ...
  •  QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数QT源码解析(二)深入剖析QT元对象系统和信号槽机制QT源码解析(三)深入剖析QT元对象系统和信号槽机制(续)QT源码解析(四)剖析Qt的事件机制原理QT源码解
  • 对象存储系统概念

    千次阅读 2017-10-20 22:43:06
    对象存储系统概念
  • 面向对象系统分析与设计

    千次阅读 2018-11-03 21:12:51
    面向对象系统分析与设计OOA概述1. 分析与设计什么是分析什么是设计总结2. 面向对象功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建...
  • 数据库管理系统

    千次阅读 2018-10-24 00:14:00
    创建数据库主要是用数据定义语言定义和创建数据库模式、外模式、内模式等数据库对象。在关系数据库中就是建立数据库(或模式)、表、视图、索引等,还有创建用户、安全保密定义(如用户口令、级别、角色、存取权限)...
  • 《数据库原理》— 数据库系统概论第五版习题解析

    万次阅读 多人点赞 2017-05-29 14:57:48
    数据库系统概论前七章习题解析 第1章绪论 1.试述数据、数据库、数据库系统、数据库管理系统的概念。答: (l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。...
  • 前言HDFS作为一套成熟的分布式存储系统,它能够存储TB甚至,PB规模级别的数据。依托于如此强大的存储能力,目前越来越多的公司、企业已经开始将越来越多的数据往HDFS上迁移。但是当数据量达到一定规模,HDFS不见得能...
  • Ceph 是一个开源的分布式存储系统,包括对象存储、块设备、文件系统。它可靠性高、管理方便、伸缩性强,能够轻松应对PB、EB级别数据。Ceph 存储体系中,核心为 RADOS,它是一个高可用分布式对象存储,该模块负责对...
  • 系统分析与设计方法---面向对象的分析与设计

    万次阅读 多人点赞 2018-09-14 20:26:32
    面向对象的分析与设计  面向对象方法是一种非常实用的软件开发方法,它一出现就受到软件技术人员的青睐,现已成为计算机科学研究的一个重要领域,并逐渐成为软件开发的一种主要方法。面向对象方法以客观世界中的...
  • 控制系统中被控对象建模

    千次阅读 2020-05-21 14:45:01
    控制系统中被控对象建模 杨亮东 2020年3月26日 被控对象的模型是控制器设计的基础,对象模型越准确,越有利于设计出最优的控制律。 被控对象建模,即建立对象输入xxx与输出yyy之间的映射关系f(⋅)f(\cdot)f(⋅)。 y=...
  • 文件系统vs对象存储——选型和趋势

    千次阅读 2016-04-22 13:50:18
    摘要:对象存储和我们经常接触到的硬盘和文件系统等存储形态不同,它提供Key-Value(简称K/V)方式的RESTful数据读写接口,并且常以网络服务的形式提供数据的访问。但经过多年的发展,我们现在通常认为AWS S3或者...
  • MyBatis面试题(2020最新版)

    万次阅读 多人点赞 2019-09-24 16:40:33
    简单的说,ORM是通过使用描述对象和数据库之间映射的数据,将程序中的对象自动持久化到关系型数据库中。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具,使用...
  • 用面向对象(Java)实现ATM系统

    千次阅读 多人点赞 2018-06-25 20:37:16
    只支持储蓄卡,只支持100面值,最小余额不能小于1,单次只能取出3000。5.退出时,显示历史操作记录。6.界面友好,大方代码:package pro0624;import java.util.Scanner;public class ATM { int 密码 = ...
  • Qt 之属性系统

    万次阅读 多人点赞 2016-07-25 16:35:32
    简述Qt提供一个类似于其它编译器供应商提供的复杂的属性系统(Property System)。然而,作为一个编译器和...它依赖于元对象系统(Meta_Object Sytstem) - 通过信号和槽提供对象间通讯机制。简述 声明属性的要求 通
  • AI+5门300课程+社群闭门分享会 源码开源下载:https://github.com/DjangoPeng/keras-101/tree/master/code_samples 【为什么学AI】 归功于近年来大规模数据和硬件计算能力的大幅度提升,人工智能的概念近两...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,234
精华内容 132,093
关键字:

元对象系统