컴공 일기261
- 동적 배열을 즉석에서 한번 구현해봤습니다.
이동시맨틱, 대입연산, 복사생성, …, 자료출력 등등 구현을 했습니다만
결정적으로 l-value [] 연산을 지원을 안하고 있습니다.
따라서, 객체가 생성될 때 극한의 효율로 생성이 되게 했고, 자료 출력도 가능하게 했습니다만
사용자 코드 쪽에서 동적 배열 객체의 값들을 초기화해서 사용할 수 있도록 [] 연산에 대한 오버로딩을 해줘야 합니다.
간단하지만 그건 시간이 늦은 관계로 내일… 하겠습니다.
이동시맨틱 연습 겸 짜본 코드지요…
자고로, 여기에서 탬플릿과 상속을 조금 더 추가해 봄 직 합니다.
며칠 간은 계속 손을 볼 예제죠. 아직 미완성입니다.
극한의 추상성을 제공해보려고요.
vector STL 흉내 내보겠다는 건데,
객체지향 프로그래밍 공부할 때 이 자세가 중요하지 않나 생각합니다.
흉내를 우선 낼 줄 알아야, 창조를 할 수 있는 거니까요.
#pragma once
#include <iostream>
using namespace std;
class dynamic_array
{
public:
dynamic_array() = default;
explicit dynamic_array(int n);
dynamic_array(const dynamic_array&);
dynamic_array(dynamic_array&&) noexcept;
int* begin() const;
int* end() const;
const int getSize() const;
void PrintData() const;
int operator[] (const int index) const;
dynamic_array operator+(const dynamic_array&);
dynamic_array& operator=(const dynamic_array&);
dynamic_array& operator=(dynamic_array&&) noexcept;
~dynamic_array();
private:
int* data = nullptr;
int size = 0;
};
dynamic_array::dynamic_array(int n)
{
cout << "dynamic_array(int)" << endl;
data = new int[n];
size = n;
}
dynamic_array::dynamic_array(const dynamic_array& rhs)
{
cout << "dynamic_array(const dynamic_array&)" << endl;
this->size = rhs.getSize();
data = new int[size];
for(int i=0; i<size; i++)
{
data[i] = rhs.data[i];
}
}
dynamic_array::dynamic_array(dynamic_array&& rhs) noexcept
{
cout << "dynamic_array(dynamic_array&&)" << endl;
//의도적인 shallow copy
this->data = rhs.data;
this->size = rhs.getSize();
rhs.data = nullptr;
rhs.size = 0;
}
dynamic_array::~dynamic_array()
{
delete[] data;
}
int* dynamic_array::begin() const
{
return data;
}
int* dynamic_array::end() const
{
return data+size;
}
const int dynamic_array::getSize() const
{
return size;
}
void dynamic_array::PrintData() const
{
for(int i=0; i<this->getSize(); i++)
{
cout << this->data[i] << " ";
}
cout << endl;
}
int dynamic_array::operator[](const int index) const
{
if(index < 0 || index >= this->getSize())
{
cout << "Invalid Index!!" << endl;
exit(-1);
}
return this->data[index];
}
dynamic_array dynamic_array::operator+(const dynamic_array& rhs)
{
dynamic_array retVal(this->getSize() + rhs.getSize());
copy(this->begin(), this->end(), retVal.begin());
copy(rhs.begin(), rhs.end(), retVal.begin() + this->getSize());
return std::move(retVal);
}
dynamic_array& dynamic_array::operator=(const dynamic_array& rhs)
{
cout << "dynamic_array::operator=(dynamic_array&)" << endl;
if(data != nullptr)
delete[] data;
data = new int[rhs.getSize()];
for(int i=0; i<rhs.getSize(); i++)
{
data[i] = rhs[i];
}
size = rhs.getSize();
return *this;
}
dynamic_array& dynamic_array::operator=(dynamic_array&& rhs) noexcept
{
cout << "dynamic_array::operator=(dynamic_array&&)" << endl;
if (this != &rhs) { // 자기 대입 방지
if (data != nullptr) {
delete[] data;
}
data = rhs.data;
size = rhs.size;
rhs.data = nullptr;
rhs.size = 0;
}
return move(*this);
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
물론 지구 온난화 억제와 환경 보전까지는 좋다 치는데 이렇게 되면 또 태블릿으로 겜...
-
나군에 외대 융합일본지역학도 아슬한데 가군에 고대 통계를 박아넣음 ㄷㄷ 칸수로는...
-
조심하세요 여러분 전 밖에 안 나가서 이게 유행인 줄도 몰랐네요;;;;;
-
생각해보니 3월엔 타지로 가아하고 대학이 확정난것도아니고 너무이기적이야
-
간단한 투표 3
ㄱㄱ
-
올해 느낀거 3
대부분은 진학사에서 컷만 본다 컷 2점 낮아져서 5칸되는 순간 40명 몰림
-
진짜 써본적이 없음
-
위에 364.00도 그런데 232.00 ???
-
얼버기 3
얼리버드가벌레를잡는다
-
많이 다름요??
-
655 <<< 뭔가 게이같은 느낌. 안정감이 있음
-
ㅆㅂ 낮에 도착하면 상관없는데 저녁배송이거나 주말도착하면 좆된다....
-
새터는 갈 수 있나,,
-
이거 맞아?
-
언제쯤 안정화될까 이미 안정화 된거?? 현역이라 잘 몰루ㅠㅠ
-
점공계산기 1
어디서 다운받는건가요? 진학사에서 하는건 인증받아야한대서 귀찮아서 안할거고 셈퍼님...
-
감읆 못잡겠네에에
-
ㅈㄱㄴ
-
개궁금한데요.
-
중증이네 2
유우카 쨩 사랑해❤️❤️❤️❤️
-
난 그때 자고 있어서 맨날 못본단말야 내게도 볼 기회를 줘
-
간호는 갈 수 있으려나..
-
양치, 머리, 폼 클렌징, 바디워시 한 번에 다 하고 한 번에 물로 씻어서...
-
시발 뭔ㅋㅋㅋㅋㅋ 10
2026 2강 30분ㅋㅋㅋ
-
원래 공중파 근들갑 자막 재밌게 봤는데 요즘 들어선 너무 꼴보기가 싫어짐
-
70만은 집에서 거리 1km 95만은 집에서 거리 600m 점심은 사먹고 저녁은...
-
하소연 22
어제 인증햇는데 이 잔인한 놈들 ㄱㅁ한번을 안쳐주더라... 다 그냥 이모티콘만...
-
안씻었네 어째 아무리 공부해도 유리천장이 있는거 같더니만
-
서성한 라인 점공 아직 안 들어왔으면 보통 허순가요? 아니면 널널해서 안 들어온 건가요?
-
커서 뭐하고 살지 10
문과는 전문직이나 고시가 답인가
-
(서울대 합격 / 합격자인증)(스누라이프) 서울대 25학번 단톡방을 소개합니다. 0
안녕하세요. 서울대 커뮤니티 SNULife 오픈챗 준비팀입니다. 서울대 25학번...
-
하루에 2번 씻는데 잘할리가 ㅋㅋ
-
방금 구글링으로 맨유 져지 좀 찾아보니까 바로 추천 뜨네 무섭다ㄷ
-
지독한 혐오 6
-
오수 서울대 ㄱㄴ?
-
나 물리하는데 일주일에 샤워 한번은 함
-
기상.. 19
응..
-
원래 이런사이였나
-
피곤해요 11
너무 미라클 모닝을 해버린걸지두요
-
전 재보니까 15분 내외
-
두번??
-
왜 서울대가 1순위냐 다 ㅅㅂ 메디컬이 왜 뒷전이지
-
누백 2% 이면 국수탐 평백이 어느정도 라고 보면 될까요? 또는 누백 1.5% 라면...
-
전과목 싹다 1컷 받으면 392점임 근데 의대갈라면 거기서 약 12-22점을 더 받아야함
-
윗공대:내 거주지(였던것) 중간공,아랫공:봉구스밥버거가 맛있음 농생대:건물이 엄청...
-
점공 0
셈퍼점공, 0.6공식, 루트공식중에 뭐가 잘맞을까요? 셈퍼공식은 좀 후하게나오는거같아서..
486..