컴공 일기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를 선물하세요.
-
누가 언제 뭐했는데
-
강등될락말락 ㅋㅋ
-
ㅈㄱㄴ
-
방음잘되는데 들릴정도 ㄷㄷ
-
죄다 평균에 걸쳐있어
-
국어-강기분 문학 이원준 독서 영어-기출정식, 월간조정식, 이명학 신텍스 알고리즘...
-
축구 잘 몰라도 아는팀들이 각 구간마다 있네 ㄷㄷㄷ 다 어디 전쟁나서 남자선수들 징병당함??
-
스나 결과인데 희망이 아예 없겠죠…헤헤
-
국어 질문이나 받아요 27
-
다들 수만휘 가서 대기타다 보면 원하는 걸 얻으실지도
-
메인글 보고 생각나서...
-
학부모들 단체스턴
-
입시커뮤니티잖아 ㅋㅋㅋ 근데 난 입시커뮤니티로 안쓰고 있었어서 충격은 안먹었는데...
-
그거보단 작았죠?
-
시대 라이브 0
엄소연쌤 공통 들을려하는데 라이브 듣고 따로 인강커리도 같이 타야하나요?
-
옛날 분식 떡볶이하구 순대를 와구와구
-
나만이런가요?
-
일단 난 아님
-
흑흑 제발 흑흑
-
새벽야갤처럼 원래 저런 거 올리는 거 아는 놈들이 들어가서 보는 거면 모를까...
-
글 주제 왜 이래요?
-
알려줘요
-
살면서 2
다른 사람 거기가 선 그건 처음보는데 진짜 불쾌하네
-
보지찢어버린다이재명은몰라도나는진짜찢음<이건 통매음 신고됨? 10
아이폰 통화녹음만 됐어도 이미 신고했는데
-
트위터에검색만해도주루룩 나오는게야추다 알고싶지않았다
-
잠잘 공간이 없어..
-
나만 못봤냐 1
ㅈㄴ궁금하네
-
사이트전환..
-
인증 4
다들 사랑해요 잘자요
-
진짜..
-
최대한 잘생겨보이는 구도로 있는 힘껏 최대한 멋있게 찍은 관심 ㅈ도 없는...
-
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-
에구...
-
ㅠㅠ
-
정석준T 작년에 들었었는데 굉장히 고능하시지만 제 머리가 그케 빨리 안돌아가고...
-
원점수로요!!! 만점자가 많은시험 이었나요???
-
뉴런vs시발점 0
이번수능 15 20 21틀렸는데 뉴런2025를듣고 2026을 들을까요 아니면...
-
사실불쾌함.
-
알몸야외산책 ㅇㅈ하면 13
수린이보다 한수 위임?그정도여도 못이기나
-
np의 세계는 끝이없다
-
솔직히 최근에 1
너무 평화롭긴했어
-
진짜 수학 잘하고싶어서 오답노트 써보려는데 틀린문제를 [ 다시쓰기—>다시풀기 ] 이...
-
토나올듯 0
자고싶은데 하 못 볼걸 봄
-
대샬리송ㅋㅋ 8
그래도 졋잘싸 ㄱㄴ
-
ㅇㅈ 마지막 13
운동따윈 사이클과 배드민턴밖에 안하는 미쉐린 인생 나름 인증의 정상화를 위해 노력하는 중
-
영상으로나 볼수있는
-
출근해야하는데 3
큰일이네
-
이걸못보네
-
진짜 레전드 앰생이어도 안할거 같은데 저건 ㅋㅋ
-
수학 공통 공부 0
시대에서 송준혁쌤 공통 듣는데 잘안맞는거같아요,, 근데 그만두면 공통공부 더...
486..