这是主文件
#include <bits/stdc++.h>
#include "animal.h"
#include<sstream>
using namespace std ;
int main(){
Animal elephant("ele" ,12);
Animal cow("cow" ,22) ;
cow = elephant ;
cow.a[0]=5 ;
return 0 ;
}
这是Animal.h文件
#ifndef ANIMAL_H
#define ANIMAL_H
#include<iostream>
#include<string>
using namespace std ;
class Animal{
string name ;
int age ;
public :
int a[] ;
Animal(string name , int age ):name(name) ,age(age) {}
Animal(const Animal & other);
};
#endif // ANIMAL_H
这是Animal.cpp
#include"animal.h"
#include<iostream>
using namespace std ;
Animal::Animal(const Animal & other){
cout<<"copy constructor is called"<<endl ;
this->age=other.age ;
this->name = other.name ;
}
我无法调用复制构造函数??代码有什么问题。我已经给所有文件加上名称和代码。
答案 0 :(得分:1)
之后
Animal cow("cow" ,22) ;
cow
存在。它已经建造。它不能再次构造,所以
cow = elephant ;
是一个分配,并调用operator=
(分配运算符)。让我们添加一个赋值运算符
Animal & Animal::operator=(const Animal & other){
cout<<"Assignment operator is called"<<endl ;
this->age=other.age ;
this->name = other.name ;
}
转到Animal
,看看会发生什么:https://ideone.com/WlLTUa
Animal cow = elephant
将调用复制构造函数(示例:https://ideone.com/sBdA1d)
还请阅读Copy Elision,以获得另一个很棒的技巧,它可能导致“老兄,我的副本在哪里?”输入问题。