컴공 일기261
게시글 주소: https://orbi.kr/00070988182
- 동적 배열을 즉석에서 한번 구현해봤습니다.
이동시맨틱, 대입연산, 복사생성, …, 자료출력 등등 구현을 했습니다만
결정적으로 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를 선물하세요.
-
(언미기준) 어느정도 성적 받아야하나요 백분위 기준?
-
운동하면 잘생기지나 말지
-
생활패턴의중요성 4
아침 9시에 먹었는데도 지금 배고파짐 밥먹어야징
-
얼버기 2
-
작수때도 케이스 더샜나 덜샜나 해서 22 틀렸는데 3덮 도 22 똑같이 틀림
-
시대 현강 0
무휴반 예정이고 부모님이 수학, 지구 라이브 정도는 결제 해주시겠다고 하셔서...
-
모두 맛점! 4
모두 맛점
-
오르비언한테 똥침놓기
-
3덮 미적 89 4
ㅆㅂ 수열 완벽하게 푼줄알앗다
-
ㅈㄱㄴ
-
수험생 신분으론 과분한거 같아
-
늙은이들이랑은 못사겨!
-
이미 딱 시작부터 정해진 느낌인거 같아요
-
문학 2
오르비에서 내가 젤 못함
-
어 어차피 혼밥이야 ㅋㅋ 들어왔으면 점메추 하고가라
-
그럼 그 사람 보려고 열심히 다닐텐데 음
-
기하 인기없는 이유가 뭐에요?
-
ㅋㅋㅋㅋ
-
토욜인데 등교 1
동아리 ㅡㅡ
-
고민되네
-
그러면 뭐하나요 밖을 못나가는데!! 주변이 다 남자인데!!
-
ㄱ 판단할때 1칸이 30도니까 2:3:루트 13 거리비로 루트 13은 3보다 크니까...
-
기하런하니깐 연락많이왕.. 빨리 공부끝내서 도움을 줘야게써
-
그니까.. 내가 스스로 인만추할 기회를 걷어찼다고? 0
하......
-
싱숭생숭 숭실숭실 벌렁벌렁 킁킁 해짐..
-
여기 아니면 내 얘기 들어주는 사람도 없고, 즐거운 일이 읎어 ㅠ 근데 또 너무...
-
성심당 빼고...
-
이제 꾸역꾸역 롤스랑 노직까진 했는데 이게 맞나..
-
이거 벌크업되는거 맞냐 골격40 찍어보신분 있나욥
-
원과목은 보통 생1지1하라 그러듯이
-
한 번도 안 걸림 역시 몸이 기억하능구만
-
저희집 근처에 벚꽃나무가 없어서 몰라서..
-
울렁울렁
-
오르비 탈릅 언젠간 해야하는데
-
이러면 그냥 과탐을 다시해볼까 싶네요 사1과1으로
-
미적 30번까지 모든 문제 건들여보려면 152122282930제외 대략 몇분정도만에 풀어놔야하나요?
-
동의동의ㅠㅠ
-
다시 기출로 돌아갈까요? 그럼 이제 3회독인데..
-
나두 어리구나 2
아가들이 놀아주니까 신나서 어제부터 마구 커뮤했네 현생살러가야지 바이바이
-
에휴
-
사설모의고사 처음 풀어보는데 평가원이나 교육청은 그럭저럭 풀만했는데 더프는 막히는게...
-
남들에게 쉽든 어렵든 제가 맞췄으면 성장한거겠죠? 뿌듯합니다
-
시대인재 브릿지 0
보통 몇분안에 풀어야 되나요?
-
21수능 나형 3컷이였다가 다시 준비중입니다.. 진지하게 통합 3만 나와도 바랄게...
-
가상의 여친 AI기술을 적극 활용합시다
-
김범준 스블 29,30 등비급수추론 케이스분류 문제들 수강전에 문제푸는데 1시간...
-
무슨 자욱일까....
-
공부도 잘하고 키크고 운동하고 돈잘벌고 잘생긴 남자 13
차은우.
-
벌크업을 벅벅 크하하 근데 턱살이랑 뱃살만 붙음 아
486..