음악, 삶, 개발

Copy Constructor 만들기 본문

개발 공부/C++ 약점공략

Copy Constructor 만들기

Lee_____ 2020. 10. 20. 01:53

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;
}