标签: c++

在创建派生类Object时将参数传递给基类构造函数

考虑两个类AB

class A
{
public:
    A(int);
    ~A();
};

class B : public A
{
public:
    B(int);
    ~B();
};


int main()
{
    A* aobj;
    B* bobj = new bobj(5);    
}
Run Code Online (Sandbox Code Playgroud)

现在这个类B继承了A.

我想创建一个对象B.我知道创建一个派生类对象,也会调用基类构造函数,但这是没有任何参数的默认构造函数.

我想要的是B获取一个参数(比如5),并将其传递给构造函数A.请展示一些代码来演示这个概念.

c++ oop constructor

25
推荐指数
3
解决办法
4万
查看次数

根据经验确定C++ 11表达式的值类别?

C++ 11中的每个表达式都有一个值类别.lvalue,xvalue或prvalue之一.

有没有办法编写一个宏,给定任何表达式作为参数,将产生一个字符串"lvalue","xvalue"或"prvalue"酌情?

例如:

int main()
{
    int x;

    cout << VALUE_CAT(x) << endl; // prints lvalue
    cout << VALUE_CAT(move(x)) << endl; // prints xvalue
    cout << VALUE_CAT(42) << endl; // prints prvalue
}
Run Code Online (Sandbox Code Playgroud)

怎么可以VALUE_CAT实现?

c++ c++11

25
推荐指数
1
解决办法
1007
查看次数

在C++ 11中从函数返回元组的最佳方法是什么?

我想从函数中返回一些值,我想将它打包在一个元组中.所以我有两种功能声明的可能性:

std::tuple<bool, string, int> f()
{
  ...
  return std::make_tuple(false, "home", 0);
}
Run Code Online (Sandbox Code Playgroud)

std::tuple<bool, string, int> f()
{
  ...
  return std::forward_as_tuple(false, "home", 0);
}
Run Code Online (Sandbox Code Playgroud)

这些功能是等价的?在您喜欢的这些功能之间?

c++ c++11 stdtuple

25
推荐指数
2
解决办法
8743
查看次数

如何返回类型列表中的最大类型?

如何创建一个返回类型sizeof大于其他类型的类模板.例如:

typename largest<int, char, double>::type;
Run Code Online (Sandbox Code Playgroud)

那会回来double.我该怎么做呢?

c++ templates c++11

25
推荐指数
2
解决办法
942
查看次数

拆分argpack一半?

如何将参数包拆分为两个相等的部分?

例如,我想做这样的事情:

template<typename T> T sum(const T& t)
{ return t; }

template<typename T> T sum(const T& t1, const T& t2)
{ return t1 + t2; }

template<typename ...T> T sum(T&& ...t)
{ sum(first_half(t)...) + sum(second_half(t)...); }
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

25
推荐指数
1
解决办法
1114
查看次数

std :: minmax()和std :: tie的重载

在C++ 11中引入的std :: minmax函数应该返回一对分别是给定值的最低和最大值.

在这个例子中:

int a = 6, b = 5;
auto p = std::minmax(a, b);
std::cout << "p.first = " << p.first << std::endl;
std::cout << "p.second = " << p.second << std::endl;
Run Code Online (Sandbox Code Playgroud)

这与宣传和打印一样

p.first = 5
p.second = 6

现在我想有效地修改ab强制b低于a,就像运行这段代码一样:

if (b > a)
    std::swap(a, b);
Run Code Online (Sandbox Code Playgroud)

所以我写了这个:

int a = 5, b = 6;
std::tie(b, a) = std::minmax(a, b);
std::cout << "a = " << a << std::endl;
std::cout << "b …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

25
推荐指数
1
解决办法
887
查看次数

删除的构造函数必须是私有的吗?

class A
{
public:
    A() = default;
    A(const A&) = delete;
};

class A
{
public:
    A() = default;

private:
    A(const A&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

在任何情况下,这两个定义是否始终相同?

c++ standards constructor access-rights c++11

25
推荐指数
2
解决办法
3363
查看次数

QGraphicsView使用鼠标滚轮在鼠标位置放大和缩小

我有一个应用程序QGraphicsView,在屏幕中间有一个窗口.我希望能够使用鼠标滚轮滚动放大和缩小.

目前我已经重新实现QGraphicsView并覆盖了鼠标滚动功能,因此它不会滚动图像(就像默认情况下那样).

void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0)
    {
        emit mouseWheelZoom(true);
    }
    else
    {
        emit mouseWheelZoom(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当我滚动时,如果鼠标滚轮向前移动,如果鼠标滚轮向后,我发出的信号为真.

然后我将这个信号连接到处理我的GUI内容的类中的插槽(缩放功能见下文).现在基本上我认为我的缩放功能根本不是最好的方法我已经看到一些人使用overriden wheelevent函数设置比例的例子,但我真的找不到完整的答案.

所以相反,我已经做到了这一点,但它无论如何都不是完美的所以我正在寻找这个稍微调整一下或者在轮子事件功能中使用比例的工作示例.

我初始化m_zoom_level0在构造函数中.

void Display::zoomfunction(bool zoom)
{
    QMatrix matrix;

    if(zoom && m_zoom_level < 500)
    {
        m_zoom_level = m_zoom_level + 10;
        ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
        matrix.scale(m_zoom_level, m_zoom_level);

        ui->graphicsView->setMatrix(matrix);
        ui->graphicsView->scale(1,-1);
    }
    else if(!zoom)
    {
        m_zoom_level = m_zoom_level - 10;
        ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
        matrix.scale(m_zoom_level, m_zoom_level);

        ui->graphicsView->setMatrix(matrix);
        ui->graphicsView->scale(1,-1);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你在上面看到的那样,我正在使用QMatrix和缩放并将其设置为Graphicsview并将转换锚点设置为鼠标下方,但是如果我滚动加载它有时不能正常工作它只会开始放大(我认为这与int循环或其他东西有关).

正如我所说,帮助这个或鼠标下的规模的一个很好的例子将是伟大的.

c++ qt qgraphicsview

25
推荐指数
7
解决办法
4万
查看次数

如何从C++中的函数返回结构?

我试过几个不同的论坛,似乎无法得到一个直接的答案,我怎么能让这个函数返回结构?如果我试着'返回newStudent;' 我收到错误"没有从studentType到studentType的合适的用户定义转换."

// Input function
studentType newStudent()
{   
    struct studentType
    {
        string studentID;
        string firstName;
        string lastName;
        string subjectName;
        string courseGrade;

        int arrayMarks[4];

        double avgMarks;

    } newStudent;

    cout << "\nPlease enter student information:\n";

    cout << "\nFirst Name: ";
    cin >> newStudent.firstName;

    cout << "\nLast Name: ";
    cin >> newStudent.lastName;

    cout << "\nStudent ID: ";
    cin >> newStudent.studentID;

    cout << "\nSubject Name: ";
    cin >> newStudent.subjectName;

    for (int i = 0; i < NO_OF_TEST; i++)
    {   cout << "\nTest " << …
Run Code Online (Sandbox Code Playgroud)

c++ struct structure return function

25
推荐指数
4
解决办法
9万
查看次数

什么是C++中的辅助函数?

我试图从C++中理解辅助函数The C++ Programming Language by Bjarne Stroustrup.但是这本书没有解释任何关于它的内容以及在课堂上使用它的目的.我尝试在网上搜索它并发现了这一点.我有它的要点,但仍然不清楚辅助函数的真正目的是什么,何时我应该使用它们,总的来说,什么是辅助函数?

c++ helper-functions

25
推荐指数
2
解决办法
4万
查看次数