월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C++
질문입니다
안녕하세요 // 9_12.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include <cassert> #include <initializer_list> using namespace std; class IntArray { private: unsigned m_length = 0; int* m_data = nullptr; public: IntArray(unsigned length = 0) : m_length(length) { m_data = new int[length]; } IntArray(const std::initializer_list<int>& list) : IntArray(list.size()) { cout << "list.size() In constructor " << list.size() << endl; int count = 0; for (auto& element : list) { m_data[count] = element; ++count; } //for (unsigned count = 0; count < list.size(); ++count) // m_data[count] = list[count]; // error } ~IntArray() { delete[] this->m_data; } IntArray& operator=(const std::initializer_list<int>& list) { cout << "assignment operator" << endl; cout << "list.size() In assignment operator " << list.size() << endl; delete[] m_data; int length = list.size(); m_data = new int[length]; int count = 0; for (auto& element : list) { m_data[count] = element; ++count; } return *this; } friend std::ostream& operator << (std::ostream& out, const IntArray& arr) { for (unsigned i = 0; i < arr.m_length; ++i) out << arr.m_data[i] << " "; out << endl; return out; } }; int main() { int my_arr1[5] = { 1,2, 3,4,5 }; int* my_arr2 = new int[5]{ 1,2,3,4,5 }; auto il = { 10, 20, 30 }; IntArray int_array { 1, 2, 3, 4, 5 }; cout << int_array << endl; int_array = {7, 2, 3, 2, 1, 6, 5}; cout << int_array << endl; return 0; } 이 코드에서 operator = 에 사이즈 7로 잘들어가는데 cout << int_array<<endl; 마지막줄을 실행시킬때 5개만 나오는데 왜그런지 모르겠습니다 ㅜㅜ 그리고 initializer_list 를 왜사용해랴하는지도 정확하게 알지못하겠습니다 ㅜ
- 해결됨홍정모의 따라하며 배우는 C++
11:10 질문입니다
public: Cents(int cents = 0) { m_cents = cents; } int getCents() const {return m_cents; } int &getCents() { return m_cents; } friend Cents operator +(const Cents &c1, const Cents &c2) { return Cents(c1.getCents() + c2.getCents()); } 위에서 friend를 없애면 파라미터에 왜 2개를 넣으면 안되고 1개만 넣어야 하는지 이유를 잘 모르겠습니다
- 해결됨홍정모의 따라하며 배우는 C++
레퍼런스 관련 질문입니다.
안녕하세요 class Calc { private: int m_value; public: Calc(int init_value) : m_value(init_value) {} Calc& add(int value) { m_value += value; return *this; } Calc& sub(int value) { m_value -= value; return *this; } Calc& mult(int value) { m_value *= value; return *this; } Calc& div(int value) { m_value /= value; return *this; } void print() { cout << m_value << endl; } }; int main() { //Simple s1(1), s2(2); //s1.setID(2); //s2.setID(4); //cout << &s1 << " " << &s2 << endl; Calc cal(10); cal.add(10).sub(1).mult(2).print(); //cal.add(10); //cal.sub(1); //cal.mult(2); //cal.print(); Calc &temp1 = cal.add(10); cout << &temp1 << endl; temp1.print(); Calc &temp2 = temp1.sub(1); cout << &temp2 << endl; temp2.print(); Calc &temp3 = temp2.mult(2); cout << &temp3 << endl; temp3.print(); 위에 코드가 원본 코드입니다. 저기서 Calc 함수 생성자 내에 add,sub,mult 함수의 리턴값을 레퍼런스가 아닌 그냥 Calc로 public: Calc(int init_value) : m_value(init_value) {} Calc add(int value) { m_value += value; return *this; } Calc sub(int value) { m_value -= value; return *this; } Calc mult(int value) { m_value *= value; return *this; } Calc div(int value) { m_value /= value; return *this; } 질문 이렇게 받았을때 리턴값이 Main 내에 Calc temp1 = cal.add(10); 했을 때 38에서 +10이 되어서 48이 되어야 할 것 같은데 30이 나오는데 그 이유가 궁금합니다. 그뒤에는 -1 *2 된 값이 나와서 이전 값이 30이라고 가정한다면 때 각 각 Calc temp2 = temp1.sub(1); Calc temp3 = temp2.mult(2); 의 리턴 값으로 29, 58로 나옵니다. 유튜브로 실리콘밸리에서 생활하시는 영상 잘 보고 있습니다 바쁘신 와중에도 답변 해주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
6.12 동적 할당 배열 3:12
const int length = 5; int arr[length]; 이렇게 작성하는 것이 정적 할당 배열이고, int length; cin >> length; int* arr = new int[length]; 이렇게 작성하는 것은 동적 할당 배열로 이해했습니다. 그런데 int* arr = new int[length]; 를 이해하는 것이 너무 어렵습니다. 여기서 *는 메모리의 주소를 담는 변수인 포인터라는 의미로 알고 있는데, 그렇다면 int* arr= new int[length] 는 포인터가 배열인 것인가요...? new 는 앞 강의에서 "자료형 사이즈에 맞게 메모리를 받아 온 다음 그 메모리 주소를 알려준다."라고 하셨고,,,, 실행을 해보니 new 와 *는 같이 있어야 하는 것 같네요,,, 앞에 배운 것이 뒤죽박죽 섞여서 혼란스럽네요,, 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
연습문제 질문하겠습니다
안녕하세요! 강의 너무 잘듣고있습니다. 질높은 강의에 매우 만족하고 감사하게생각하고있습니다. 궁금한점이 하나있는데 가끔 강의 끝나실때 연습문제를 많이 풀어보는게 좋다고하시는데 따로 홍정모 교수님의 사이트나 책이있나요?
- 해결됨홍정모의 따라하며 배우는 C++
이 강의에 대한 질문은 아닌데 궁금한거 하나 질문드립니다
class Simple { private: int m_id; public: Simple(int id) { setID(id); } void setID(int id) { m_id = id }; int getID() { return m_id }; }; 에서 void setID랑 int getID 함수가 Simple 생성자 보다 밑에있는데 public: Simple(int id) { setID(id); } 이렇게 더 밑에있는 setID(id)를 불러올수있나요?
- 해결됨홍정모의 따라하며 배우는 C++
생성자 관련 질문입니다
안녕하세요 class Something 내에서는 class Something { private: int m_i; double m_d ; char m_c; int m_arr[5] ; B m_b; <-- 여기 부분이 선언 가능한데 }; main 함수내에서는 B b; 해보면 안되는데 class B { private: int m_b; public: B(const int &m_b_in) :m_b(m_b_in) { } }; 이렇게 class B 에서 생성자를 B(const int &m_b_in) 으로 하고있어서 메인에서 그냥 B b; 선언이 안되는건 알겠는데 Something 함수 내에서는 왜 되는지 궁금합니다
- 미해결홍정모의 따라하며 배우는 C++
6.8 포인터와 정적 배열 4:43
교수님께서 int *ptr = array; 로 하셨는데, 포인터는 변수의 주소를 저장하므로, int *ptr = &array 로 해야하는 것 아닌가요?.. 감사합니다
- 미해결홍정모의 따라하며 배우는 C++
연습 숙제 주신것에 대해 질문이있어요.
삭제된 글입니다
- 미해결홍정모의 따라하며 배우는 C++
namespace 와 iostream 순서
답변 감사합니다 조이님! 조금 너무 지엽적인 질문일 수 있어 조심스러운데 답변 중 "iostream이라는 library 속의 std라는 namespace인 부분집합 관계로 봐야할까요?" 라고 말씀하셨는데 그 반대로 보면 될 것 같아요. library 내용은 std 안에 속해 있습니다. 여담으로 iostream 는 수 많은 c++ standard 라이브러리 중 하나일 뿐입니다. " 1) using namespace std; 가 iostream보다 큰 범위인데 #include <iostream>보다 먼저 써주는 이유가 뭔가요? 수학적으로는 큰 범위를 먼저 써주고 작은 범위인 iostream을 쓰는 게 맞지 않나요? 2) using namespace std; 가 큰 범위라면 #include <iostream>을 다시 한 번 명시하는 이유가 있나요? using namespace std; 만 쓰는 게 효율적이지 않나요? 이 부분이 어색하게 느껴지는게 namespace std 가 더 큰 범위인데 2번째에 써줌. using namespace 안에 cin과 cout이 있는데 #include <iostream> 을 선언한 후에 using namespace를 씀. 두 가지 이유때문에 조금 부자연스러운 것 같습니다. 단순히 포함관계가 아니여서 그런건가요?
- 미해결홍정모의 따라하며 배우는 C++
library 와 namespace
안녕하세요 여기서 std 는 standard 라이브러리인가요? 아니면 namespace인가요? 그 차이를 정확히 모르겠습니다. iostream이라는 library 속의 std라는 namespace인 부분집합 관계로 봐야할까요?
- 미해결홍정모의 따라하며 배우는 C++
assert 문의 드립니다.(자료형이 아닌 템플릿 매개변수)
이미 main 함수 내 for 문에서 i 값이랑 범위 값이 정해져있는 데 왜 저 부분에 assert 를 사용하셨는지 문의드립니다.
- 미해결홍정모의 따라하며 배우는 C++
이렇게 정리 했는데 제가 잘 이해한걸까요?
(사진)
- 미해결홍정모의 따라하며 배우는 C++
단일 객체와 배열 객체에서 nullptr 사용
안녕하세요. 먼저는 이 글을 읽어 주셔서 감사합니다. 다름이 아니라 이전 강의(6.12)에서는 메모리 반납과 쓰레기 값 방지를 위해 <단일 객체 > delete ptr; ptr = nullptr; 를 해줬었는데 <배열 객체> delete[] array; 만 해주는 것 같더라구요. ( array= nullptr; 안 함 ) 질문 : 1. 배열객체에서는 보통 (쓰레기값 방지를 위해) nullptr을 사용하지 않나요? 2. 사용하지 않는다면 단일 객체에서 발생할 수 있는 문제가 배열객체에서는 일어나지 않기 때문일까요? ( 코딩해보니 배열에서도 쓰레기 값이 뜨긴하던데...)
- 미해결홍정모의 따라하며 배우는 C++
연습문제 질문 있습니다.(나머지 연산자)
너무 쉬운 것인데, (짝수%2 )하면 무조건 0 아니면 1이 나와야 되는 것 아닌가요? a에 122 입력 시에는 b에 2가 들어가고 그래서 홀수로 나와버립니다. 도저히 이해가 안 갑니다. int main() { int a; cin>>a; int b; b=a&2; if(b==0) cout<<"짝수"<<endl; else cout<<"홀수"<<endl; return 0; }
- 미해결홍정모의 따라하며 배우는 C++
질문 있습니다.
int main() { // cout<<std::boolalpha; // cout<<isEqual(1,1)<<endl; // cout<<isEqual(1, 3)<<endl; if(0) { cout<<"True"<<endl; } else { cout<<"false"<<endl; } return 0; } 위의 코드에서 실행하면 false 가 나옵니다. 궁금한 점은, if(0)이면, 만약 "무언가"가 0이면 else 문을 실행한다는 것인데 여기서 말하는 무언가가 무엇인지 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
함수에서 동적할당 관련 궁금합니다
안녕하세요? 함수내에서 변수를 선언하면 함수 호출이 종료될 때 변수에 대해 할당된 메모리가 반환되는것으로 알고 있습니다 다만 함수내에서 동적할당을 할 시에는 delete를 하지 않으면 메모리가 계속 유지가 되는데 이는 함수안의 변수가 stack에 저장이 되서 그렇고 동적할당을 할 시에는 heap에 저장이 되어 그렇다고 생각하면 될까요?
- 미해결홍정모의 따라하며 배우는 C++
git add 이부분에서 오류가 나는데 이유를 모르겠습니다
C:\git> git add my_first_txt.txt 이렇게 똑같이 입력하니 fatal: pathspec 'my_first_txt.txt' did not match any files대충 파일에 my_first_txt.txt이란 파일이 없다는거 같은데왜이러는 걸까요?
- 미해결홍정모의 따라하며 배우는 C++
[6:35] 반환값 최적화에 대해서 질문 있습니다
안녕하세요? 반환값 최적화에 대해 궁금한 점이 있어서 질문 드립니다. 해당 시간 화면을 보면, release 모드로 바꿔주었을때 call-by-value임에도 불구하고 doSomething 함수에 있는 temp 인스턴스와 main 함수에 있는 result 인스턴스의 주소가 서로 동일함을 확인할 수 있었습니다. 혹시 반환값 최적화는 1. release 모드로 바꿀 때 2. 초기화가 되는 대상이 '클래스'일 때 이 두가지를 반드시 포함해야만 반환값 최적화가 되는 건가요? 항상 영상 잘 보고 있습니다. 감사드립니다.
- 해결됨홍정모의 따라하며 배우는 C++
[4:21] 배열 주소 관련 질문있습니다
안녕하세요~ 4분 21초 쯤에 cin으로 문자열을 입력받고 그것을 출력할 때 cout << myString<<endl; 이런식으로 출력을 하더라구요 제가 궁금한 것은 만약 int형 배열이 있다고 치면 int a[] = {1, 2,3}; 이후에 cout << a << endl; 시 a[0]의 주소값이 나오는데 myString은 주소가 아닌 문자열 그 자체가 나오는 이유를 알 수 있을까요?