음악, 삶, 개발
Copy Constructor 만들기 본문
Cat 클래스의 객체를 가지고있는 Cats 클래스가 있다.
한개의 Cats 객체를 만드려할때, 기존의 Cats 객체를 복사하여 만드는 코드이다.
Copy Constructor 안에서 range based for 루프를 사용하기위해,
begin() 과 end() 를 정의해주어야한다.
class Cat {
public :
Cat(int toAge) : age(toAge) {}
int getAge() { return age; }
private :
int age;
};
class Cats {
public :
Cats() {}
Cats(const Cats& other) { for (const auto& cat : other) add(cat); }
void add(const Cat& cat) { cats.push_back(cat); }
std::size_t getSize() const { return cats.size(); }
std::vector<Cat>::iterator begin() { return cats.begin(); }
std::vector<Cat>::const_iterator begin() const { return cats.cbegin(); }
std::vector<Cat>::iterator end() { return cats.end(); }
std::vector<Cat>::const_iterator end() const { return cats.cend(); }
private :
std::vector<Cat> cats;
};
int main () {
Cat cat1 {1};
Cat cat2 {2};
Cats cats1;
cats1.add(cat1);
cats1.add(cat2);
Cats cats2 {cats1};
std::cout << cats2.getSize() << std::endl; // 2
return 0;
}