【发布时间】:2014-03-04 01:58:32
【问题描述】:
我有一个包含两个向量的类:int 和 Str。现在我想定义一个复制构造函数,以便颠倒元素的顺序;例如如果a=(1,Hello),(2,World) 和我写auto b=a; 我得到b=(2,world),(1,hello)。这是完美的工作。我遇到的问题是重载 = 运算符,以便使用复制构造函数。这是我的类加上复制构造函数:
class grade
{
private:
static int copies;
std::vector<int> i;
std::vector<std::string> s;
public:
grade() {copies++;};
grade (int , std::string );
void printval();
void adder(int , std::string );
int getcount();
grade(grade & obj)
{
std::vector<std::string>::reverse_iterator strIt = obj.s.rbegin();
for (std::vector<int>::reverse_iterator numIt=obj.i.rbegin();
numIt!=obj.i.rend(); ++numIt)
{
this->adder(*numIt, *strIt);
strIt++;
}
}
grade operator =(grade );
};
当我重载= 运算符时,会调用构造函数,但问题是没有将 valur 传递给 LHS 变量。这是重载的=。
grade grade::operator=(grade cpy)
{
grade newer = cpy; //Calls the copy constructor as expected
return cpy; //No error but blank value is returned to the LHS variable.
}
我的主要功能是:
int main()
{
grade c2(1,"Hello");
grade c1;
c2.adder(4,"World");
c2.printval();
std::cout<<std::endl;
grade c3 = c2;
c3.printval();
std::cout<<std::endl;
c1 = c2;
std::cout<<std::endl;
c1.printval();
return 0;
}
为什么c1 保持空白??
【问题讨论】:
-
永远不要在 Stack Overflow 问题中说“完美运行”。
标签: c++ operator-overloading copy-constructor assignment-operator copy-and-swap