小编chr*_*ris的帖子

构造函数的顺序 - 链继承

我运行下面的程序,在第一行main之后得到了这个输出:

1
6
1
6
13

任何人都可以解释为什么它进入的建设者GrandFather两次?

//base class 
class Grand{
public:
    Grand(){cout<<"1"<<endl;}
    Grand(const Grand & g){cout<<"2"<<endl;}
    virtual ~Grand  (){cout<<"3"<<endl;}
    virtual void fun1(Grand g){cout<<"4"<<endl;}
    virtual void fun3(){cout<<"5"<<endl;}
private:
    int m_x;
    };



//derived class 
    class Father: public Grand{
    public:
        Father(){cout<<"6"<<endl;}
        Father(const Father & f){cout<<"7"<<endl;}
        ~Father(){cout<<"8"<<endl;}
        void fun1(){cout<<"9"<<endl;}
        void fun2(Father & f){
            cout<<"10";
            f.fun3();
        }
        void fun3(){
            cout<<"11"<<endl;
        }
        virtual void fun4(){
            cout<<"12"<<endl;
        }
    };


sing namespace std;

//derived class 
        class Son: public Father{
        public:
            Son(){cout<<"13"<<endl;}
            Son(const Son& …
Run Code Online (Sandbox Code Playgroud)

c++

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

参数列表中任意点的默认参数是否可能?

希望看到这个的人知道默认参数:

void setCase (string &str, int form = UPPERCASE)
{
    for (char &c : str)
        c = (form == UPPERCASE ? c & ~0x20 : c | 0x20); //this bit differentiates english uppercase and lowercase letters
}

int main()
{
    string s1 = "HeLlO", s2 = s1, s3 = s1;
    setCase (s1, UPPERCASE); //now "HELLO"
    setCase (s2, LOWERCASE); //now "hello"
    setCase (s3); //now "HELLO" due to default argument
}
Run Code Online (Sandbox Code Playgroud)

使用默认参数的一个缺点是您必须在列表末尾启动默认参数.有时,这涉及将参数重新排列为一个看起来很愚蠢的订单.要解决这个问题,必须进行单独的重载.

让我拿一个Window API函数FindWindow,它通过类名,标题或两者找到一个窗口,作为一个例子:

HWND WINAPI FindWindow( //returns handle to …
Run Code Online (Sandbox Code Playgroud)

c++ default-arguments

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

通用回调

我正在尝试在类中存储回调.目前,我这样做:

struct Callback {
    Callback (std::function<void ()> func) : func_ (func){}
    void call() const { func(); }

private:
    std::function<void ()> func_;
};
Run Code Online (Sandbox Code Playgroud)

如您所见,只能使用特定类型的函数(当前无返回且无参数).

有没有什么方法可以使用这样的类,我把它传给它的是什么?

void increment (int &n) {
    ++n;
}

int main() {
    int someNum = 5;
    Callback callback (increment, someNum); //will call `increment (someNum);`
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用参数包来存储参数,并使用a typename来存储返回类型,然后制作std::function<ReturnType (Args)> callback_一些东西,并用类似的东西调用它callback_ (givenArgs...);.然而,我对模板的知识不够,或者甚至弄清楚它是否可行.

我将从中获得的实际用途(至少现在)是一个计时器,但也许制作一个generic_function<>包装一个小的类std::function<>会有所帮助.但是,对于此示例,每2秒暂停和取消暂停的计时器:

void togglePause (Countdown &c) {
    c.togglePause();
}

int main() {
    Countdown main (10000); //create countdown of 10s
    Countdown …
Run Code Online (Sandbox Code Playgroud)

c++ generics templates callback c++11

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

GCC不会在Ubuntu中编译预期的C代码

今天早上在我的CS实验室,我正在编译并执行一些C代码.代码如下:

#include <stdio.h>
#define SIZE 3

int main()
{
float x[SIZE];
float *fp;
int i;

for(i=0; i<SIZE; i++)
//{
    x[i] = 0.5*(float)i;
//}

for(i-0; i<SIZE; i++)
//{ 
    printf(" %d %f \n", i, x[i]);

//}

fp=x;

for(i=0; i<SIZE; i++)
//{
    printf(" %d %f \n", i, *(fp+i));
//}  
}
Run Code Online (Sandbox Code Playgroud)

这是我在Ubuntu终端中用来编译的命令:

gcc -o program program.c

这是我以前执行的命令

./程序

这是我遇到的结果:

0 0.50000

1 1.50000

2 2.50000

这是我期望在同一实验室的其他计算机上找到的结果.

0 0.50000

1 1.50000

2 2.50000

0 0.50000

1 1.50000

2 2.50000

免责声明:我仔细检查并三重检查我的代码与其他计算机中的代码完全无关.

显然,这里的编译器有问题.任何人都可以告诉我这是什么问题?以及如何解决它?

问候

c ubuntu gcc

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

不能在c ++中使用list迭代器

好吧,所以我在我的代码中有错误,其中包括一个迭代器.
这是我的代码的错误部分:

for(list<char>::iterator it = eatUpRight.begin();it!= eatUpRight.end();it+=2)
{
    board[*it][*(it+1)]=3;
    _3eat2(*it,*(it+1),eatOptions,newCurrentEatingOption);
    board[*it][*(it+1)]=0;
}
Run Code Online (Sandbox Code Playgroud)

不要担心电路板和_3eat2以及任何其他标识符,因为这不是问题所在.
你需要知道的是,该板是一个二维阵列.

board[*it][*(it+1)]
Run Code Online (Sandbox Code Playgroud)

(它)是2d数组的索引,但它给了我错误.并在我试图使用迭代器的其他地方给我其他错误.
那么请告诉我这段代码有什么问题吗?

c++ iterator list

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

带有数组和指针的C字符串函数(strcopy,strcat ...,strstr)

每当我在dev-C++中使用其中一个函数时(我知道它的旧版本,但由于某些原因仍然在我的大学里教过.)

strcat,strcpy,strcmp,strchr...//And their variants stricmp...
Run Code Online (Sandbox Code Playgroud)

这些函数的第一个参数必须是一个数组(即:

char ch[]="hello";
Run Code Online (Sandbox Code Playgroud)

但它不能成为指向字符串bc的指针因某种原因导致崩溃.实际上,举例来看这两个代码:

代码1:

#include<stdio.h>
#include<string.h>
main()
{char ch[20]="Hello world!";
 char *ch2="Hello Galaxy!";
 strcat(ch,ch2);
 printf("%s",ch);
 scanf("%d")//Just to see the output.
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常并给出了预期的结果(Hello World!Hello Galaxy!)

但逆代码2崩溃了.

码2:

#include<stdio.h>
#include<string.h>
main()
{char ch[20]="Hello world!";
 char *ch2="Hello Galaxy!";
 strcat(ch2,ch);
 printf("%s",ch2);
 scanf("%d")//Just to see the output.
}
Run Code Online (Sandbox Code Playgroud)

此代码崩溃并导致

file.exe has stopped working Error.
Run Code Online (Sandbox Code Playgroud)

几乎所有带有两个参数的字符串函数都是一样的.造成这个问题的原因是什么.

c arrays string pointers

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

是否有明确定义的随机循环终止条件?

考虑以下这个机构main:

std::srand(std::time(nullptr));
while (std::rand());
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,我无法找到任何内容,无论是在规范中,谷歌上,还是在本网站上,都是关于它是否定义明确.至于规格:

N3485§6.5/ 4 [stmt.iter]对此情况说:

[注意:迭代语句中对条件的要求在6.4中描述. - 结束说明]

但是,通过6.4,我没有看到任何涉及这种情况的东西.理论上,循环可以实际上永远持续下去,但在实践中,我通常有5毫秒的运行时间,所有测试运行中有一次是22毫秒.

将循环终止条件作为变化的(伪)随机数的基础是明确定义的行为吗?如果不是,那是什么行为?

c++ random undefined-behavior language-lawyer

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

增加列表中元素的值

我需要帮助增加mylist中元素的值并将新列表分配给mylist3.我试着像你的数组或矢量一样,但它没有用.任何帮助赞赏.提前致谢.

std::list<int> mylist(myarray, myarray + sizeof(myarray) / sizeof(int));
cout << "mylist contains: ";
for (std::list<int>::iterator b = mylist.begin(); b != mylist.end(); ++b)
    cout << ' ' << *b;

cout << "\n" << endl;

std::list<int> mylist3(10);
for (int z = 0; z < 10; z++) {
    mylist3[z] = mylist[z] + 5;
}

cout << "mylist3 contains: ";
for (std::list<int>::iterator f = mylist3.begin(); f != mylist3.end(); ++f)
    cout << ' ' << *f;
Run Code Online (Sandbox Code Playgroud)

c++ element list

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

将整数数组复制到另一个数组时代码崩溃(使用整数指针)

我发现很难找到下面的代码有什么问题.我试图将一个简单的整数指针复制到我的一个本地整数指针(或Interger数组)作为我的结构构造函数的参数.由于某些奇怪的原因,它在for循环内的第一次迭代中崩溃.请帮忙

struct mystruct{
  UINT8 command;
  UINT8 nextOffset;
  UINT8* writeBuffer1;
  UINT8 checkSum;

  mystruct( UINT8 devAddress, UINT8 commandIn, UINT8 nextOffsetIn, UINT8 bufferSizeIn, UINT8 dataBufcheckSumIn, UINT8* writeBufferIn )
  : command( commandIn )
  , nextOffset( nextOffsetIn )
  {
     writeBuffer1 = new UINT8[bufferSizeIn];
     memset( &writeBuffer1, 0, bufferSizeIn ); 
     for( int i = 0; i < bufferSizeIn; i++ ) {
         writeBuffer1[i] = writeBufferIn[i];  //Program crashes here in the first iteration itself
     } 
     checkSum = (UINT8)  ~( devAddress + command + nextOffset + dataBufcheckSumIn) + 1; dbg::info() …
Run Code Online (Sandbox Code Playgroud)

c++ memory pointers

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

当它不初始化任何东西时,为什么要使用初始化列表?

在这个片段中:

struct Result
{
    Result() : output1(){};
    int output1[100];
}
Run Code Online (Sandbox Code Playgroud)

有什么Result() : output1(){};作用?

我知道这: output1()是初始化列表,但为什么在它什么都不做的情况下还要提到它呢?

c++ struct

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