C++ 如何制作复制构造函数?

C++ 如何制作复制构造函数?,c++,class,oop,C++,Class,Oop,我想为这个类RNA创建一个复制构造函数,以便从另一个对象RNA复制细节 #include "RNA.h" #include"Sequence.h" #include<bits/stdc++.h> using namespace std; RNA::RNA() { set_sequence(); } RNA::RNA(char * seq, RNA_Type atype) { int x; int i=0; while(1) {

我想为这个类RNA创建一个复制构造函数,以便从另一个对象RNA复制细节

#include "RNA.h"
#include"Sequence.h"
#include<bits/stdc++.h>
using namespace std;
RNA::RNA()
{
    set_sequence();
}

RNA::RNA(char * seq, RNA_Type atype)
{
    int x;
    int i=0;

    while(1)
    {
        if(seq[i] != 'C'&&seq[i] != 'G'&&seq[i] != 'A'&&seq[i] != 'U')break;
        x++;
        i++;
    }
    x--;
    length = x;
    this->seq = new char[length];
    for(int i=0;i<length;i++)
    {
        this->seq[i] = seq[i];
    }
    type = atype;
}
#包括“RNA.h”
#包括“Sequence.h”
#包括
使用名称空间std;
RNA::RNA()
{
设置_序列();
}
RNA::RNA(字符*序列,RNA_类型atype)
{
int x;
int i=0;
而(1)
{
如果(seq[i]!=“C”&seq[i]!=“G”&seq[i]!=“A”&seq[i]!=“U”)中断;
x++;
i++;
}
x--;
长度=x;
此->seq=新字符[长度];
对于(int i=0;iseq[i]=seq[i];
}
类型=atype;
}
这是复制构造函数

RNA::RNA( RNA& rhs)
{
    seq = new char[length];
    for(int i=0;i<length;i++)
    {
        seq[i] = rhs.seq[i];
    }
    type  = rhs.type;
}
RNA::RNA(RNA&rhs)
{
seq=新字符[长度];
对于(int i=0;i>l;
char*arr=新字符[l];
对于(int i=0;i>arr[i];
}
cin>>l;
RNA-anas(arr,(RNA_型)l);
int-s;
cin>>s;
char*arr2=新字符;
对于(int i=0;i>arr2[i];
}
cin>>s;
RNA-saeed(arr2,(RNA_型)s);
赛义德(阿纳斯);这里有错误
saeed.Print();
错误是“调用(RNA)(RNA&)时不匹配”
那么我该怎么做才能解决这个错误呢?saeed在那一点上已经存在,而您正试图把它当作一个函数来使用。
除非在构造时,否则无法复制构造,并且它看起来与任何其他初始化类似:

RNA saeed(anas);
或:


如果要替换现有对象的值,可以使用赋值(并且需要实现该赋值;请阅读相关内容)。

最简单的方法是让编译器为您执行赋值

class RNA
{
    RNA_Type type;
    std::string seq;
public:
    RNA(std::string = /* default seq */, RNA_Type = /* default type */);

    /* implicitly generated correctly
    ~RNA();
    RNA(const RNA &);
    RNA & operator = (const RNA &);
    RNA(RNA &&);
    RNA & operator = (RNA &&);
    */

    // other members
};

RNA::RNA(std::string aseq, RNA_Type atype)
 : seq(aseq.begin(), aseq.find_first_not_of("ACGT")), type(atype)
{}
线路

saeed(anas); 
不是对构造函数的调用,而是对不存在的构造函数的调用

您大概想要的是一个复制赋值运算符

RNA& RNA::operator=(RNA const&);
对于足够简单的类,它将由编译器自动生成(如Caleth的回答所述)

saeed = anas; 

首先请阅读(可能也是如此)。@AlgirdasPreidžius-
RNA::RNA(RNA&rhs)
是一个复制构造函数。但是,它不能用于复制
const
对象。@Peter或临时对象。若要在@CinCout的注释中添加另一个提示,错误消息实际上应该准确地包含正在发生的事情和正在调用的内容。@Asu今天我学到了。除此之外,我还学到了复制构造函数可能有多个参数(如果其他参数具有默认值)。
RNA& RNA::operator=(RNA const&);
saeed = anas;