小编Ant*_*rez的帖子

C++继承 - 子类构造函数调用?

我主要有以下内容:

Sum *sum = new Sum(Identifier("aNum1"), Identifier("aNum2"));
Run Code Online (Sandbox Code Playgroud)

我的课程是:

class Table {
private:
    static map<string, int> m;    
public:
    static int lookup(string ident)
    {
        return m.find(ident)->second;
    }
    static void insert(string ident, int aValue)
    {
        m.insert(pair<string, int>(ident, aValue));
    }
};   

class Expression {
public:
    virtual int const getValue() = 0;
};

class Identifier : Expression {
private:
    string ident;
public:
    Identifier(string _ident) { ident = _ident; }
    int const getValue() { return Table::lookup(ident); }    
};

class BinaryExpression : public Expression {
protected:
    Expression …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance constructor object-slicing

2
推荐指数
1
解决办法
670
查看次数

切换两个没有临时存储的值

我编写这段代码来切换两个没有临时存储的值,它运行良好,但是当我尝试使用相同的样式来做其他事情时,它不能像我预期的那样工作.

                `     
 #include <iostream>
 using namespace std;

 int main(){
   int i=100,j=200;
   //expect swich i and j
   i=j+i-(j=i);
   cout<<i<<"   "<<j<<endl;

   //expect j=100 and i=300 
   i=j+(j=i);
   cout<<i<<"   "<<j<<endl;
 } 
Run Code Online (Sandbox Code Playgroud)

结果是:

200    100
400    200
Run Code Online (Sandbox Code Playgroud)

那么为什么第二个(j=i)工作呢?

我们可以就这种情况进行讨论吗?没有人会维护这样的代码,包括我.

c++

1
推荐指数
2
解决办法
350
查看次数

开发简单GUI的最佳方法,同时保留原生C++的强大功能

我用原生ANSI C++编写了代码,进行了一些复杂的数值分析.我想为它开发一个简单的GUI(几个单选按钮和文本框).我听说微软"托管"的C++代码使GUI开发变得简单,但计算效率却低于原生C++.

所以我的问题是,在保留原生C++的强大功能的同时,开发简单GUI的最佳方法是什么?

请注意我没有开发GUI的经验和VS的非常有限的经验(我只是用它来构建控制台版本).

c++ native

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

从输出流中删除输入

我想使用std::copystd::ostream_iterator打印出vector括号内的逗号分隔列表中的字符串.所以我必须处理删除", "最后一个元素之后的问题.

我试过这个:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main() {

    std::vector<std::string> v;
    v.push_back("a");
    v.push_back("b");
    v.push_back("c");

    std::stringstream os;
    os << '(';
    std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(os, ", "));
    os.seekp(-2, std::ios_base::cur);
    os << ')';

    std::cout << os.str() << ".";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

(a, b, c) .
         ^
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出在右括号后面有一个额外的空格字符,因为seekp只是移动书写位置但不删除书写字符.

有没有办法删除最后一个字符或写一个EOF?

c++ iostream vector ostream

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

难以理解的无限后向循环C++

我是C++的新手,我正在尝试实现一个向后循环,我创建了非常好的解决方案,但我想知道我的版本不正确并进行无限循环.

这是我创建的一个工作版本(我不明白我们如何减少i条件......):

for (unsigned i = size ; i-- > 0 ; )
{
  // do stuff with i
}
Run Code Online (Sandbox Code Playgroud)

这是我写的一个版本,它可以工作,但不会降到0(这种方式对我来说似乎更合乎逻辑):

for (unsigned i = size-1 ; i > 0 ; i--)
{
  // do stuff with i
}
Run Code Online (Sandbox Code Playgroud)

如果我说例如n=10,如果我print i在循环中,我会得到这个:

9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

这里的版本对我来说更合乎逻辑,应该归零,但是提供了一个无限循环.

for (unsigned i = size-1 ; i >= 0 ; i--)
{
  // do stuff with i
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么最后一个版本不起作用,最好的选择是什么?

c++ for-loop

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

Google测试返回值

我正在使用Google Test和Google Mock框架进行项目的单元测试。我有各种单元测试项目,并且想要自动化我的构建,以便运行所有项目。

我期望单元测试可执行文件在成功时返回0,在任何测试失败时返回1(或任何其他值),但是当所有测试通过时,我得到1。我收到一些GMOCK警告,但找不到有关影响返回值的警告的任何文档。

我尝试运行测试过滤以仅运行一个测试用例,在该用例中,不会触发GMOCK警告,并且返回值仍为1。

我有几个DISABLED测试用例,所以我将它们注释掉。仍然获得1作为返回值。

根据RUN_ALL_TESTS宏的文档和代码注释,返回值应为0。

我想不出会导致返回值1的任何其他内容。我是否缺少任何内容?

c++ googletest googlemock

0
推荐指数
1
解决办法
9087
查看次数