#include<iostream>
#include<vector>
#include<list>
#include<queue>
#include<map>
using namespace std;
class dog{
public:
string name;
dog();
dog(const dog & d);
void barkname(){
cout<<"bark "<<name<<endl;
}
virtual ~dog(){
//cout<<"delete dog "<<name<<endl;
}
};
dog::dog(){
cout<<"blank dog"<<endl;
this->name="blank";
}
dog::dog(const dog &d){
cout<<"copy dog"<< " "+d.name<<endl;
string temp=d.name;
this->name=temp+" copied";
}
int main(){
dog d;
d.name="d";
dog dd;
dd.name="dd";
dog ddd;
ddd.name="ddd";
vector<dog> doglist;
doglist.push_back(d);
doglist.push_back(dd);
doglist.push_back(ddd);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你好,我是cpp的新手.我试图在我的班级狗中使用复制构造函数.我使用push_back三次将三只狗推入载体.所以我期望复制构造函数被调用三次.但是,执行代码后,我发现复制构造函数被调用了六次,结果如下:
blank dog
blank dog
blank dog
copy dog d
copy dog dd
copy …Run Code Online (Sandbox Code Playgroud) 我正在使用C++模板,我得到了上面的错误.
我的代码如下:
#include <iostream>
#include <string>
using namespace std;
enum type{ONE,TWO,THREE,FOUR,FIVE};
class base{
public:
virtual void baseOut()const =0;
};
template<class T>
class derived:public base{
virtual void drivedOut()const=0;
};
template<class T,type>
class derived2:public derived<T>{
public:
void baseOut(){}
void drivedOut(){}
};
int main(){
derived2<string,ONE> d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,由于我已经在类模板drived2中覆盖了纯虚函数,为什么drived2仍然是一个抽象类?如何删除此错误.
谢谢:)
我从 c++ 入门知道我们可以通过以下方式使用 typedef:
typedef int mytype;
typedef int *mytype;
Run Code Online (Sandbox Code Playgroud)
不过下面的代码也编译通过了,好像新建了一个“rt”类型,我很好奇rt的类型是什么,这种typedef的常见用途是什么?
class A{
public:
int c;
};
typedef int A::* rt;
Run Code Online (Sandbox Code Playgroud) 我想创建三个线程并将一个整数传递给这些线程中的每一个.我使用了pthread_create,我的代码如下.
#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
#define NUM_OF_JOB 3
void* doJob(void* arg){
int i = *((int*)arg);
printf("%d\n",i);
}
void init_job() {
pthread_t thread[NUM_OF_JOB];
int index[NUM_OF_JOB]={-1,-1,-1};
for(int i=0;i<NUM_OF_JOB;i++){
pthread_create(&thread[i],NULL,doJob,(void*)(&index[i]));
}
}
int main(){
init_job();
sleep(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我打算将-1传递给每个线程,但在运行服务器代码的代码之后,我发现它没有打印三个-1.相反,他们可以产生奇怪的输出.那为什么呢?
类似的代码可以 在pthread_create函数的pass参数中 找到我在他的代码和我的代码之间找不到任何不同的东西.但是在他的代码中,线程可以获得预期的参数.
非常感谢你:)
顺便说一句,我尝试从上面的链接稍微更改代码,并运行它.令人惊讶的是,我的mordified版本也没有产生预期的结果.(我认为每个线程应该得到自己的唯一整数作为参数)这是我的mordified码.有人可以解释一下吗?
#include <stdio.h>
#include <pthread.h>
#define THREAD_NUM 10
void *thread_func(void *arg)
{
int v = *(int*)arg;
printf("v = %d\n", v);
return (void*)0;
}
int main(int argc, const char *argv[])
{
pthread_t pids[THREAD_NUM];
int rv;
int i;
for (i = 0; …Run Code Online (Sandbox Code Playgroud) 我有几个.c文件,我想找到行printf,对于那些行,我想//在它们之前添加注释掉代码.我可以使用python读取每个文件,进行转换,并将转换后的文本写回来,但它太复杂了.还有其他简单的方法吗?我考虑过sed和awk,但我不知道如何编写表达式,或者是否可以使用sed/ 来完成此任务awk.