월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
9.12 이니셜라이저리스트 연습문제
#include <iostream>#include<cassert>using namespace std;#include<initializer_list> class IntArray{ unsigned mLength = 0; int *mData = nullptr;public: IntArray(unsigned length) : mLength(length) { mData = new int[length]; } ~IntArray() { delete[]this->mData; } IntArray(const std::initializer_list<int> &list): IntArray(list.size()){ int count = 0; for ( auto &e : list ) { mData[count] = e; ++count; } } friend ostream &operator<<(ostream &os, IntArray &arr) { for ( unsigned i = 0; i < arr.mLength; ++i ) { os << arr.mData[i] << " "; } os << endl; return os; } //=operator IntArray& operator=(const std::initializer_list<int> &array) { cout << "assignment operator" << endl; delete[] mData; mLength = array.size(); if(mData!=nullptr ) { mData = new int[mLength+1];//이 부분에서 mData = new int[mLength];로 코딩하면 버퍼 오버런이 뜹는데 오류 메세지를 보면이렇게 나옵니다 0에서 0사이라는 것이 뭔가요?? int i {}; for ( auto &e : array ) { mData[i++] = e; } } else { mData = nullptr; } return *this; }}; int main(){ IntArray intArray = {11,12,13,14,15,16,17,18,19,20}; intArray = {1,2,3,4,5,6,7,8,9,10}; cout << intArray << endl;}
- 미해결홍정모의 따라하며 배우는 C++
제가 알고 있는게 맞는지 훈수좀요!!
ignore()함수는 cin연산자?? 의 구성요소 중 하나이고 cin은 std에 정리 되어 있으며 이 std는 iostream이라는 라이브러리(도서관)에 정의 되어 있다......!라고 하면 되는 건가요 그리고 ignore(x,y)는 x까지 입력을 받거나 y를 만나면 그 이후는 무시하라! 라고 이해하면 되는 거죠? 그리고 지금 드는 의문인데요 using namespace std;를 사용하고 있는데 ignore()이랑 fail()은 왜 앞에 std::cin을 붙여줘야 하죠?
- 미해결홍정모의 따라하며 배우는 C++
9.12 연습문제 대입연산자 오버로딩
class IntArray{unsigned mLength = 0;int *mData = nullptr;public:IntArray(unsigned length): mLength(length){mData = new int[length];}~IntArray(){delete[]this->mData;}IntArray(const std::initializer_list<int> &list): IntArray(list.size()){int count = 0;for ( auto &e : list ){mData[count] = e;++count;//count++로 쓰기도 함}}//=operatorIntArray& operator=(const std::initializer_list<int> &array){cout << "assignment operator" << endl;delete[] mData;mLength = array.size();if(mData!=nullptr ){mData = new int[mLength];int i {};for ( auto &e : array ){mData[i++] = e;}}else{mData = nullptr;}return *this;}};int main(){intArray2 = {1,2,3,4,5,6,7,8,9,10};cout << intArray << endl;}이런식으로 작성을 했는데 버퍼오버런이나옵니다버퍼오버런이 사이즈가 m-1개인데 더 큰 데이터를 넣을 할 때 발생? 하는 거라고 검색해서 찾았는데 size()함수는 배열 갯수 -1을 반환하는 것은 아닌거 같은데.. https://learn.microsoft.com/ko-kr/cpp/standard-library/initializer-list-class?view=msvc-170 //=operatorIntArray& operator=(const std::initializer_list<int> &array){cout << "assignment operator" << endl;delete[] mData;mLength = array.size();if(mData!=nullptr ){mData = new int[mLength+1];int i {};for ( auto &e : array ){mData[i++] = e;}}else{mData = nullptr;}return *this;}이렇게 1을 추가해주면 오버런이 발생하지 않아요왜일까요....?? 디버거를 봐도 이해가 안됩니다
- 미해결홍정모의 따라하며 배우는 C++
[3:09] 질문
ostream & out 을 사용 하시는데, 강의 상에서는 cout처럼 사용하면 된다라고 말씀하시고 넘어가셔서 궁금증이 생겼습니다.out이 뭔지, 왜 이것을 cout처럼 써도 되는건지이와 관련된 강좌가 있는지여쭙고 싶습니다. 감사합니다
- 미해결홍정모의 따라하며 배우는 C++
17.5 강의 질문있습니다.
int main() { string str1("one"); string str2; str2 = str1; //궁금한 부분. str2 = "two"; cout << str1 << endl; cout << str2 << endl; }를 했을 때 출력 값으로 str1 은 one 이 나오고 str2는 two 가 나옵니다.근데 str2 = str1; 은 얕은 복사로 서로 같은 주소를 가르킨다고 생각이 되는데얕은 복사가 되지 않은 이유는c++에서 overload로 = 을 깊은 복사로 만들어주었기 때문이라고 이해하면 될까요?아니면 다른 문법적 이유가 있어서 얕은 복사가 되지 않는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
&& (R-value)와 얕은복사 개념에 대해 질문있습니다.
공부를 하다가 문뜩 깊은복사와 얕은복사 그리고 && 관련하여 궁금한 점이 생겼습니다.깊은 복사는 새로운 메모리를 생성해서 다르게 주소를 갖는다 라고 생각해서m_data = new int[m_length]; for (unsigned i = 0; i < m_length; ++i) { m_data[i] = res.m_data[i]; return *this; }m_data = new int[m_length]; 와 같이 새로운 메모리를 생성해서 res.m_data를 받도록 해주는 것입니다.하지만 얕은 복사는 새로운 메모리를 생성하지 않고 서로 같은 주소를 가르킨다 라고 생각해서int* m_data = new int[5]; m_data[1, 2, 3, 4, 5]; int* r_data = m_data; m_data[2] = 9; //9가 출력된다. std::cout << r_data[2] << std::endl;m_data 와 r_data 가 같은 주소를 가르켜서 둘이 서로 간섭하는 형태를 볼 수 있다.그렇다면Autoptr& operator = (Autoptr&& a) { std::cout << "Autoptr move assignment" << std::endl; if (&a == this) return *this; if (!m_ptr) delete m_ptr; m_ptr = a.m_ptr; a.m_ptr = nullptr; std::cout << m_ptr << std::endl; return *this; }에서 m_ptr = a.m_ptr; a.m_ptr = nullptr;은 얕은 복사인데 a.m_ptr 이 사라지면 m_ptr도 같이 사라진다 라고 생각하는 것이 아니라 a.m_ptr 만 사라져서 m_ptr 을 간섭하지 못하게 (만약 살아있으면은 a.m_ptr 로 m_ptr을 간섭할 수 있으니깐!) 만든다고 생각하는 것이 맞을까요?제가 제대로 이해했는지 궁금해져서 이렇게 길게 질문을 남겨봅니다 ㅎㅎ.. 긴 질문 봐주시느라 늘 감사합니다. (꾸벅)
- 미해결홍정모의 따라하며 배우는 C++
9.8 형변환 오버로딩
강의에서는 int()로 형변환 하셨는데 거기에 char형으로 바꿨는데 형변환이 되지 않습니다 어떻게 해야 형변환이 될까요?? #include<iostream>using namespace std;class Cents{int mCents;public:Cents(int cents) {mCents = cents;}int getCents(){return mCents;}void setCents(int cents){mCents = cents;}operator char(){cout << "cast" << endl;return mCents;}friend std::ostream &operator<<(std::ostream &out, const Cents¢s){out << cents.mCents;return out;}};int main(){Cents cents(98); cout << cents << endl;cout << char(98) << endl;}//operator char인 것과 상관없이?? 멤버변수가 int형이라서 int로만 변환되는건가요??//아니면 오버로딩이 안된건가요?
- 미해결홍정모의 따라하며 배우는 C++
9.6 첨자 연산자 오버로딩
5:25전후로 const붙은 경우에 오버로딩에 대해서 설명해주시는데 주로 이 같은 const는 어떤 경우에 쓰나요?? const자주 나오는데 정확히 어떨 때 써야 할 지 어렵습니다 이해 되는것 같기도한데 막상 사용하려면 이 때 쓰는게 맞는건지 기준 같은게 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
#define 변수와 vector subscript out of range
교수님, 안녕하세요.아래와 같이 vector 배열의 크기를 #define 된 MAX 로 하고, vector 의 선언을 전역으로 하느냐, 로컬로 하느냐에 따라 Error 발생여부가 달라집니다.왜 그런지 알 수 있을까요? 강의에서 관련내용을 들은 것 같기도 한데... ㅠ1) vector subscript out of range 발생.#include <iostream>#include <vector>#define MAX 10001int main(){std::vector<int> g[MAX];...}2) 문제없음.#include <iostream>#include <vector>#define MAX 10001std::vector<int> g[MAX];int main(){ ...}
- 미해결홍정모의 따라하며 배우는 C++
9.2 입출력연산자
입출력 연산자는 다른 연산자들과 다르게 클래스friend를 쓰지 않으면 문법적으로 오류가 되던데 왜 그런건가요?? 강의에서 잘 이해가 안가서요
- 미해결홍정모의 따라하며 배우는 C++
그림???
제가 수업을 놓쳐서 그런거지..아래 진도에서 언급한 "그림"이 무엇을 의미하는 건가요?강사님이 몇천장씩 그렸다는 게..포인터간의 관계도를 얘기 하는건가요?아니면 어떤 배열을 포인터로 구현하는 프로그램을 얘기하시는건지요?
- 미해결홍정모의 따라하며 배우는 C++
include 관련
강의 설명과 달리 실수로 include <limits>와 include <algorithm>을 뺐는데도 정상적으로 아래와 같이 수행이 됩니다.. 이유가 뭘까요? Microsoft Visual Studio Community 2022 (64-bit) - Current Version 17.4.2
- 미해결홍정모의 따라하며 배우는 C++
8.13 6:47 강의
cout << add(Cents(5), Cents(8)).getCents() << endl; cout << int(6) + int(8) << endl; 이게 같다는 것은 그럼 int가 클래스라는 걸까요?
- 미해결홍정모의 따라하며 배우는 C++
8.11 정적 멤버 함수
강의 중에 static int getValue() 함수에서는 this로 접근이 되지 않는 이유가 이해가 안가는데 왜 일반 멤버함수와 다르게 접근이 불가능한가요?? 그리고 this를 인스턴스 자신을 호출한다고 이해해도될까요?? this를 어떻게 이해하는 편이 좋을까요?
- 미해결홍정모의 따라하며 배우는 C++
15:36 S getStrct() 질문입니다.
S my_s = getStrct();가 성립하려면S getStrct(){S my_s{ 1, 2, 3, 4}return my_S; 이렇게 추가 돼야하는거 아닌가요??..} 그리고 getStct()함수가 return 없는데 컴파일에러도안나고 실행시 에러도 안나는 이유가 무엇인가요??
- 미해결홍정모의 따라하며 배우는 C++
8.2 캡슐화 ,접근지정자,접근 함수 강의의 setter getter
private으로 숨긴 멤버변수를 getters로 가져오고 setter로 값을 정하는 건가요?? 그럼 순서가 어떻게 되는 건가요? 이 부분이 잘 이해가 가지 않습니다. 그리고 그 값을 set으로 바꾸면 어차피 멤버변수에 접근할 수 있는 거 아닌가요?? 이상하게 이해가된거 같은데 어떻게 이해하면 좋을가요
- 미해결홍정모의 따라하며 배우는 C++
포인터 관련 자동 스타일 정리 .
강의에서 표시는 int *ptr을 유지하는데제거는 스타일 자동 정리 기능이 적용되면서int* ptr로 자동으로 변경해서 표시해줍니다.앞에서 뭔가 다르다고 하신 것 같기도 하는데일단 실습 시 차이는 없는 것 같은데 무시해도 될지요?VS2022 community 17.4.2 사용 중입니다.
- 미해결홍정모의 따라하며 배우는 C++
C++11, C++17, Modern C++ 혼용 시?
하나의 솔루션에서 각 프로젝트 별로 C++ 11, C++ 14 같은 언어 스타일 (이걸 정확히 뭐라고 부르는지 모르겠습니다만.. 이하 스타일로 부르겠습니다..)을 프로젝트 별로 제각각 다르게 쓸 수 있는 것으로 알고 있는데요. (공동작업을 하면서 오래된 내용 유지보수하거나 하면..)그렇게 섞어서도 일단 돌아가기만 한다면 문제가 없는건지 아니면 강제로 같은 스타일로 통일해서 맞춰야 하는건지요?
- 미해결홍정모의 따라하며 배우는 C++
modern C++?
modern C++의 정확한 의미를 알고 싶습니다.책 제목에서도 많이 본 것 같은데요C++ 98 이후 내용들을 모두 modern C++이라고 지칭하는 건지아니면 C++ 17 외 별도 modern C++ 이라는 고유명사의 스타일이 정의된것이 있는 건지요?
- 미해결홍정모의 따라하며 배우는 C++
3:09에 질문입니다.
int 8bit중 가장빠른 타입이라고 설명을하시고unsigned char라고 말하셨는데요 여기서 빠르다는게 뭐가 빠르다는건가요?