- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我没有 OOP 经验。我正在使用 C++ 和 Qt 开发应用程序。我已经实现了 2 个类,一个是基础类,另一个是从它继承的类。然后我为两者添加了虚拟方法并且一切正常。但后来我意识到我不认为它应该......这是例子:
这是我的基类:
namespace Ui {
class CGenericProject;
}
class CGenericProject : public QDialog
{
Q_OBJECT
public:
explicit CGenericProject(QWidget *parent = 0);
~CGenericProject();
EMeasures_t type();
private:
Ui::CGenericProject *ui;
virtual void initPlot();
protected:
QCustomPlot* customPlot;
QVector<double> m_x;
QVector<double> m_y;
EMeasures_t m_type;
};
它有一个 virtual
方法称为 initPlot
它看起来像这样:
void CGenericProject::initPlot()
{
customPlot = ui->workPlot;
customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes );
customPlot->setFocusPolicy(Qt::ClickFocus);
customPlot->xAxis->setAutoTickStep(false);
customPlot->yAxis->setAutoTickStep(false);
customPlot->xAxis->setTickStep(100);
customPlot->yAxis->setTickStep(100);
customPlot->xAxis->setRange(0, 1000);
customPlot->yAxis->setRange(0, 1000);
}
然后我有一个派生它的类:
class CEisProject : public CGenericProject
{
public:
CEisProject();
~CEisProject();
private:
virtual void initPlot();
void exampleEisMethod();
};
它的 initPlot
在这里:
void CEisProject::initPlot()
{
// give the axes some labels:
customPlot->xAxis->setLabel("Re [Ohm]");
customPlot->yAxis->setLabel("- Im [Ohm]");
customPlot->replot();
}
这就是我创建对象的方式:
CGenericProject* test = new CEisProject();
现在,当 initPlot()
方法被调用,首先是 initPlot()
来自基类 CGenericProject
被调用然后initPlot()
来自 CEisProject
叫做。我想要这个功能,我可以在通用类中预定义一些东西,然后在子类中添加特定的东西。但是一想,不应该initPlot()
是 calles exclusively?我的意思是,难道不应该从基类 或 子类而不是 两者 一个接一个地调用该方法吗?阅读后我注意到了这一点 this answer .
构造函数:
CGenericProject::CGenericProject(QWidget *parent) :
QDialog(parent),
ui(new Ui::CGenericProject)
{
ui->setupUi(this);
initPlot();
m_x.clear();
m_y.clear();
}
CEisProject::CEisProject()
{
m_type = EMeasures_t::eEIS;
initPlot();
}
最佳答案
您没有显示构造函数的定义,只显示了它们的声明。但我很确定构造函数定义包含您问题的答案。
您可能不知道派生类构造函数在将虚函数指向派生类之前调用了基类构造函数。因此,在基类构造(即将派生类的对象)中调用的虚函数获取该虚函数的基类定义。
关于c++ - C++中虚方法的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31367115/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!