inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

해결됨

홍정모의 따라하며 배우는 C++

#include <iostream> #include <cassert> #include <initializer_list> // std header file using namespace std; class IntArray { private: int length_ = 0; //unsigned int는 32비트임 int* data_ = nullptr; public: IntArray(const int& length) : length_(length) { data_ = new int[length]; } IntArray(const std::initializer_list<int>& list) : IntArray(static_cast<int>(list.size())) // list의 size만큼 위임생성자가 호출됨 { int count = 0; //count는 인덱스 기능 for (auto& element : list) // for-each구문에서는 initializer_list안의 iterator가 사용됨 { data_[count] = element; // 아래의 operator<<에서 객체 출력을 위해 ++count; } } ~IntArray() { delete[] data_; } //TODO: overload operator = IntArray& operator= (const std::initializer_list<int>& copy) { cout << "Assignment operator" << endl; length_ = copy.size(); delete[] data_; // 기존에 있던 리스트를 지움 /*if (this == copy) return *this; */ if (data_ != nullptr) { data_ = new int[length_ + 1]; // 아래의 ++count때문에 +1해줘야함 int count = 0; for (auto& e : copy) { data_[count] = e; ++count; // } } else data_ = nullptr; return *this; } friend ostream& operator<< (ostream& os, const IntArray& arr) { for (int i = 0; i < arr.length_; i++) os << arr.data_[i] << " "; os << endl; return os; } }; int main() { auto il = {2,4,6}; IntArray int_array{ 1,2,3,4,5,6,7,8,9,10 };//이니셜라이져 리스트로 인스턴스 생성 cout << int_array << endl; int_array = { 1,3,5,7,9,11 }; cout << int_array << endl; } 부분 중, IntArray(const std::initializer_list<int>& list) : IntArray(static_cast<int>(list.size())) 를 static_cast로 바꿨는데도 아래와 같은 오류가 나네요. 환경설정을 64비트로 하고 보통 vs 소스코드를 짜는데요 int는 32비트라서 저런 오류가 뜰 수 밖에 없다고 하네요. 혹시 해결할 방법이 없을까요??

  • c++
  • initializer_list
  • C++
Ambition 댓글 1 좋아요 0 조회수 672

인기 태그

인프런 TOP Writers

주간 인기글