我运行下面的程序,在第一行main之后得到了这个输出:
1
6
1
6
13
任何人都可以解释为什么它进入的建设者Grand和Father两次?
//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) 希望看到这个的人知道默认参数:
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) 我正在尝试在类中存储回调.目前,我这样做:
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) 今天早上在我的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
免责声明:我仔细检查并三重检查我的代码与其他计算机中的代码完全无关.
显然,这里的编译器有问题.任何人都可以告诉我这是什么问题?以及如何解决它?
问候
好吧,所以我在我的代码中有错误,其中包括一个迭代器.
这是我的代码的错误部分:
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数组的索引,但它给了我错误.并在我试图使用迭代器的其他地方给我其他错误.
那么请告诉我这段代码有什么问题吗?
每当我在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)
几乎所有带有两个参数的字符串函数都是一样的.造成这个问题的原因是什么.
考虑以下这个机构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毫秒.
将循环终止条件作为变化的(伪)随机数的基础是明确定义的行为吗?如果不是,那是什么行为?
我需要帮助增加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) 我发现很难找到下面的代码有什么问题.我试图将一个简单的整数指针复制到我的一个本地整数指针(或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) 在这个片段中:
struct Result
{
Result() : output1(){};
int output1[100];
}
Run Code Online (Sandbox Code Playgroud)
有什么Result() : output1(){};作用?
我知道这: output1()是初始化列表,但为什么在它什么都不做的情况下还要提到它呢?