【问题标题】:Is this inheritance? If so what is it doing? [closed]这是继承吗?如果是这样,它在做什么? [关闭]
【发布时间】:2014-05-29 14:28:16
【问题描述】:

我有一个带有 QMainWindow 的 Qt 这个应用程序,并且我正在使用 OpenCV cv::VideoCapture。我的 QMainWindow 子类在我的头文件中声明如下:

class MainWindow : public QMainWindow {
private:
    cv::VideoCapture cap,cap1;
};

然后,在我的 mainwindow.cpp 文件中,在我的构造函数中,初始化 capcap1,如下所示:

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent), cap(0), cap1(1),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

这个问题的关键是:我在这里做什么?这是简单的继承吗?我正在努力解决我的幼稚问题。

【问题讨论】:

  • class MainWindow : public QMainWindow这个继承,是的。
  • 你至少应该发布一些真实的代码。
  • @juanchopanza 这是真正的代码...
  • 好吧,你的类没有构造函数MainWindow(QWidget*),所以你的代码不会编译。
  • 您最好发布一个最小的示例,但其中不应包含无缘无故的错误。否则不清楚您是否试图找出您的代码无法编译的原因。

标签: c++ qt opencv


【解决方案1】:

这是声明类MainWindow,其成员变量capcap1都是cv::VideoCapture对象。这是使用继承,因为MainWindow 被声明为QMainWindow 的子类。

class MainWindow : public QMainWindow{
private:
    cv::VideoCapture cap,cap1;
};

这是定义你的显式构造函数。它正在使用初始化列表对您的成员变量进行初始化。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), cap(0), cap1(1),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

【讨论】:

  • 什么显式构造函数?没有一个;-)
  • 它不是默认构造函数,因为它需要一个QWidget* 指针作为输入。我猜这不是一个完整的显式构造函数,因为你不能传入 capcap1 初始化器,但我不知道该怎么称呼它。
  • 但是该类没有这样的构造函数。这就是我所暗示的。
  • 哦,你的意思是在头文件中?是的,你是正确的,在类头中没有声明任何构造函数、析构函数等。
  • 这回答了这个问题。它让我可以去查看初始化列表以了解代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2020-10-06
  • 1970-01-01
  • 2010-12-24
  • 2016-05-30
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多