用C ++创建更多OOP类

时间:2012-05-12 00:11:15

标签: c++ oop qt class

我一直在使用QT,我注意到他们通过在诸如private slots: public slots: signals:之类的类中实现一些新功能来将OOP提升到另一个级别......他们正在做什么来声明这样的类的类别?它是编译器特定的还是只是一种typedef?我猜它可以移植到主要操作系统,因为QT将在几个系统上运行。我出于好奇并创建自己的子类来帮助组织和创建更多的OOP程序。例如

class Main
{
handles:
  HANDLE hWin;
threads:
  HANDLE hThread;
};

然后只需执行

即可轻松完成继承
class Dialog : handles Main
{

};

2 个答案:

答案 0 :(得分:3)

对我来说,看起来人们没有回答你的问题,他们正在回答一些不同的事情。你似乎在谈论恰好用于插槽的“section标签”,并希望你自己的类部分的section标签,如句柄和线程。这是QT通过在将代码发送到编译器之前预处理来完成的。如果不添加另一个编译阶段,这不是你自己可以做的事情。

尽管如此,它确实没什么用处,除了告诉QT预编译器找到它的插槽部分。你不能继承它们,就像你想要做的那样。它只标记了一个生成内省代码的区域。

你真的不想这样做。如果您有自己想要的单独组件,请将它们分成不同的类,然后将这些单独的类成为控制其交互的较大类的成员。如果你试图拆分一个具有不同部分的类,编译器将无法确保它们不以某种方式进行交互,这需要其他部分的不变量,因为编译器不会放置那些类型的使用不同成员的界限。

答案 1 :(得分:0)

它被称为signals and slotsQt meta-object compiler moc实现。 moc还为预处理类添加了内省系统。还存在信号/插槽实现,不需要特殊的预处理步骤,例如Boost.SignalsBoost.Signals2。我不会比通过函数调用的正常消息更多或更少地考虑信号和插槽OOP,但这是有争议的并且不是真正相关的。