월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
12.7 인터페이스 클래스에 관한 질문 있습니다.
인터페이스 클래스에서 마지막 부분이 이해가 잘 가지 않습니다. #include<iostream> #include<string> using namespace std; class IErrorLog { public: virtual bool reportError(const char* errorMessage) = 0; virtual ~IErrorLog() {}; }; class FileErrorLog : public IErrorLog { public: bool reportError(const char* errorMessage) override { cout << "Writing error to a file" << endl; return true; } }; class ConsoleErrorLog : public IErrorLog { public: bool reportError(const char* errorMessage) override { cout << "Priting error to a console" << endl; return true; } }; void doSomething(IErrorLog& log) { log.reportError("Runtime error!!"); } int main() { FileErrorLog file_log; ConsoleErrorLog console_log; file_log.reportError("ㅇㅇㄹ"); console_log.reportError("dfdf"); doSomething(file_log); doSomething(console_log); return 0; } file_log.reportError("ㅇㅇㄹ"); console_log.reportError("dfdf"); 과 doSomething(file_log); doSomething(console_log); 은 같은 기능을 할 수 있지 않습니까? 왜 doSomething 함수를 다시 정의하는것이 더 재활용성 있고 편한건가요? 함수 하나 더 정의했으니 코드량이 늘어난 것 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
12.2 다형성에 관한 질문있습니다.
수업을 듣다 다형성이 무엇인지 한 줄로 표현하면 무엇인가에 대한 궁금증이 생겼습니다. 구글을 찾아보면서 나름 한 줄로 줄인 결과는 다음과 같습니다 다형성은 무엇인가? 1. 같은 모양의 코드가 다른 행위를 하는 것을 나타내는 용어 C++에서는 다형성을 어떻게 구현하고 있는가? 2. C++에서는 virtual 키워드를 통한 오버라이딩을 통해 구현한다. 구현되는 장소는 서브 클래스(자식 클래스)이다. 슈퍼클래스(부모 클래스)를 상속받는 서브 클래스(자식 클래스)에서 다형성을 구현한다. 서브 클래스는 슈퍼 클래스의 virtual 멤버 함수를 같은 이름, 같은 반환 값, 같은 인자로 자신의 클래스 안에서 함수가 새로운 기능을 가지게 게 정의한다. 이렇게 정리 해보았습니다. 맞는 정리인지 여쭤보고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C++
반환형질문
마마우스로 클릭해놔서 이해하시기 편하실텐데... 제가 볼 때는 셋 다 멤버변수 m_cents를 얻으려고 저러는건데 m_cents의 참조형 = m_cents의 값+m_cents의 값; 이게 이해가 잘 안갑니다 설명 부탁드려요~
- 미해결홍정모의 따라하며 배우는 C++
질문이 있습니다
1. 정적 멤버 변수는 class 내에서 초기화가 불가능한 이유를 아무리 찾아봐도 const를 붙여서 초기화 하는 방법 밖에 없던데 왜 그런지 이유가 궁금합니다. 2. 5:22초 에서 정적 변수는 main 함수 내에서 직접 접근 할 수 있는게 클래스 내부에서 정적 변수를 선언하고 프로그램을 실행할 때 객체가 생성되지 않아도 정적 변수는 메모리에 올라가 있기 떄문에 직접 접근 할 수 있는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
int getCents() const 함수와 int& getCents()함수의 차이 질문 2
저도 강의 9-4 3분15초에 질문이 있습니다. int getCents() const //편의상 1번 함수 { return _cents; } int& getCents() //편의상 2번 함수 { return _cents; } vector<Cents> arr(20); //편의상 3번 for (int i = 0; i < 20; i++) { arr[i].getCents() = i; } 1,2번 함수와 3번의 관계에 대해 궁금합니다. 1번 멤버 함수는 없어도 3번이 작동하는데 문제가 생기지 않지만 2번 멤버 함수는 없으면 arr[i]에 밑줄이 생기면서 식이 수정할 수 있는 L-value여야 한다고 뜹니다. const가 문제 인 것 같아 2번 멤버 함수가 없는 채로 1번 함수에서 const를 제거해도 같은 오류가 생깁니다. L-value라 함은 주소에 접근 할 수 있는 변수라고 배웠습니다. 예를 들어 arr[0]에서 1번 함수에 접근해서 arr[0].m_cents를 return 받으면 되는 것 아닌가요 혹시 1번 함수의 경우 함수가 return 하면서 발생하는 익명객체의 m_cents를 arr[0].m_cents가 받기 때문에 문제가 발생하는 것인가요? 익명객체의 경우 금방 소멸해서 주소값을 알 수 없으니 말입니다. 반대로 2번의 경우 참조를 통해 arr[0]의 m_cents를 그대로 반환해 줘서 문제가 없는 건지 여쭤보고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C++
9.2 입출력 연산자 4:17에서 질문
입출력 연산자에서 friend std::ostream& operator << (std::ostream& out, const Point& point) { out << point._x << " " <<point. _y << " " <<point. _z; return out; } return out을 해줘야 chaining을 할 수 있다고 말씀해 주셨습니다. return과 연속적인 사용하고는 무슨 관계가 있는 건가요>? return은 글자 그대로 값을 돌려주고 함수가 종료되는 것인데 return과 연속적인 사용사이의 관계가 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
int getCents() const 함수와 int& getCents()함수의 차이
동전갯수를 합하는 코딩에서 int getCents() const 함수와 int& getCents()함수는 리턴값이 모두 m_cents로 같은데 무슨 차이가 있나요?
- 미해결홍정모의 따라하며 배우는 C++
10.3 집합관계 질문있습니다.
cout << lec1 << endl; cout << lec2 << endl; lec2.study(); cout << lec1 << endl; cout << lec2 << endl; 집합관계로 넘기기 전에 구성관계로만 코드를 작성한 후 코드 실행이 되지 않습니다 위의 cout에 빨간 밑줄이 그어지면서 error C2280: 'std::basic_ostream<char,std::char_traits<char>>::basic_ostream(const std::basic_ostream<char,std::char_traits<char>> &)': 삭제된 함수를 참조하려고 합니다. std::basic_ostream<char,std::char_traits<char>>::basic_ostream' 선언을 참조하십시오. std::basic_ostream<char,std::char_traits<char>>::basic_ostream(const std::basic_ostream<char,std::char_traits<char>> &)': 함수가 명시적으로 삭제되었습니다. cout이 삭제된 함수를 출력한다는게 문제인 것 같습니다. lec1.registerStudent(Student("Dash", 1) ); 메인에서 이런식으로 익명객체를 넘기는게 문제인거 같기도하고(익명객체는 다음줄에서 바로 없어진다고 하셨으니까 그 생각을 해봤습니다) 생각해 볼 수 있는 문제가 뭐가 있을까요? 어디가 삭제되었다는 건지 어떻게 찾아야 할지 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
질문이 있습니다
교수님이 작성하신대로 코드를 써보고 디버깅을 해보았습니다. 하지만 만약 배열의 크기가 1000이 넘어간다고 생각하면 1000번이 넘는 함수 호출을 사용하게 되는 것인데, 이러면 stack overflow가 생길 수 도 있겠다라는 생각이 들었습니다. 혹시 이런 경우에는 반환 값이 최적화 되어 컴파일러가 stack overflow를 방지하는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
8.7 this 포인터와 클래스의 구조에 대해 질문있습니다.
강의에서 Simple 클래스에 s1(1), s2(2); 로 초기화 후 주소를 찍어서 서로 다른 주소가 나오는 것을 확인 했습니다. 그것을 아래 그림으로 나타낸 것입니다. 제가 궁금한 것은. 첫째 , 클라스에서 찍어낸 객체(instance)의 구조가 아래와 같이 되어 있는지 궁금합니다 둘째, 아래와 같이 되어 있다면 i d라는 멤버 변수와 setID라는 멤버함수는 s1과 s2에 메모리가 잡혀 있는 것입니까? 셋째, this 포인터가 왜 필요한 것입니까? 1번지 안에 1번지 id, 1번지 setID가 다 들어가 있는데 바로바로 접근 할 수 있는 것 아닙니까? 넷째, 객체를 100개 찍어내면 (예를 들어 1~100번지까지 객체가 생성되면) id라는 멤버변수와 setID라는 멤버함수의 주소가 100개 잡히는 것입니까?
- 해결됨홍정모의 따라하며 배우는 C++
동영상 플레이속도
플레이 속도 조절 옵션이 사라져서 안보이네요.. ios iPadmini쓰고있는데.. 아시는분 계실까요??
- 홍정모의 따라하며 배우는 C++
동일예제 연습
삭제된 글입니다
- 미해결홍정모의 따라하며 배우는 C++
9.8 형변환 질문이 있습니다.
강의에서 operator int() 와 operator Cents() 이렇게 함수를 선언하는데 선언에서 반환형이 없는데 return이 어떻게 알맞게 int, Cents 로 반환이 되는거죠? 그리고 Cents cents = dollar 이렇게 대입을 해줬는데 cents에서 어떻게 dollar를 알아서 형변환을 해서 넣어주는건지도 많이 당황스럽습니다. 제 생각에는 Cents cents = Cents(dollar) 이렇게 해줘야 된다고 생각하는데..c++를 배우는데 c++를 유독 사용자가 신경써야할 것이 많다고 느꼈는데 이렇게 신경을 안써도 자동으로 해주는게 조금 낯설어서 이렇게 질문드립니다. #include using namespace std; class Cents { int m_cents; public: Cents(int cents = 0) { m_cents = cents; } operator int() { cout << "cast here" << endl; return m_cents; } }; class Dollar { private: int m_dollars = 0; public: Dollar(const int& input) : m_dollars(input) {} operator Cents() { return Cents(m_dollars * 100); } }; void print(const int& input) { cout << input << endl; } int main() { Dollar dol(2); Cents cents = dol; print(cents); return 0; }
- 미해결홍정모의 따라하며 배우는 C++
4분40초~4분50초에서
발생하는 문제점이 함수 안에 초기화된 value가 함수 호출 이후 지워져 main안의 int *value는 할당되지 않은 메모리를 가리키는 포인터가 되기 떄문에 문제가 발생하는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
9.4 강 오버로딩에서 friend operator<와 멤버함수operator<
강의에서 써주신 부분에서 friend를 쓰셨는데 bool operator<(const Cents& c2)를 통해 멤버함수로 바꿔주고 두개를 다 사용할때 어떤게 실행될까 했는데 bool operator<이 실행되더라구요? friend는 멤버함수 operat<이 없을때 실행되는거 같은데 혹시 이러한 우선순위에 대해서 찾아볼려고 하는데 혹시 키워드가 있는 내용인건가요? #include <vector> #include <iostream> #include <algorithm> using namespace std; class Cents { private: int m_cents; public: Cents(const int& input = 0) : m_cents(input) {} int getCents() const { return m_cents; } int& getCents() { return m_cents; } friend bool operator == (const Cents& c1, const Cents &c2) { return c1.m_cents == c2.m_cents; } friend bool operator<(const Cents& c1, const Cents& c2) { cout << "friend인가?" << endl; return c1.m_cents < c2.m_cents; } bool operator<(const Cents& c2) { cout << "어떤게 실행되나?" << endl; return m_cents < c2.m_cents; } friend bool operator>(const Cents& c1, const Cents& c2) { cout << "friend인가?" << endl; return c1.m_cents > c2.m_cents; } friend std::ostream& operator<<(std::ostream &out, const Cents& cents) { //멤버함수로 안되나? out << cents.m_cents; // 한푼도 없을때 참이 나오도록 구현 return out; // 하는 이유는 chaing할려는 것 이러면 cout<<Point<<... 이렇게 연속적으로 쓸수 있다. } friend std::istream& operator>>(std::istream& in, Cents ¢s) {//입력을 받아 수행해야하므로 const 하면 안된다. in >> cents.m_cents; return in; } }; int main() { vector<Cents> arr(20); for (int i = 0; i < 20; i++) { arr[i].getCents() = i; } std::random_shuffle(arr.begin(), arr.end()); for (auto ele : arr) cout << ele << " "; cout << endl; std::sort(arr.begin(), arr.end()); for (auto ele : arr) cout << ele << " "; cout << endl; return 0; }
- 미해결홍정모의 따라하며 배우는 C++
질문이 있어서 올립니다
처음에 int **dynamicArray = new int *[row]; 에서 이미 초기화가 되어 있어서 dynamicArray[col] = new int[col];에서는 int *dynamicArray[col] = new int[col]으로 쓰지 않고 그냥 대입 하는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
12 : 45 경 bool형 매개변수
bool형 매개변수를 굳이 int &number가 아니라 int number로 해서 printNumbers 함수에서도 bool (*check_fcn) (const int)로 해도 값이 출력이 되는데 꼭 포인터를 사용해야 하나요?
- 미해결홍정모의 따라하며 배우는 C++
8:25 경에 말씀하신 연산자 우선순위
제가 잘 이해를 못했는데 우선순위가 바뀌지 않는다는 것이 보통 c에서 * 가 +보다 우선순위가 높은데 커스텀 곱하기 커스텀 +도 이러한 규칙을 간다는 뜻인건가요? 아니면 *보다 +가 우선순위가 낮고 + 보다도 우선순위가 낮다는게 custon + 연산자 인건가요? 예를들어서 int + custom * custom 이런 식이 있다고 했을때 c++에서 기본자료형인 int의 +연산자보다 custom으로 한 *연산자가 우선순위가 더 낮다는 의미인건가요? (int+custom) * custom 이렇게 된다는 의미인지.. 좀 모호해서요
- 미해결홍정모의 따라하며 배우는 C++
16:01 endl관련 질문이 있습니다
16:01경에 endl이 monster.h와 position2d.h에 두번 중복되었다고 하셨는데 이게 mon1.m_name 이후에 줄바꾸고 pos2d.m_x 가 나와야 되는거 아닌가요? 근데 결과창에서는 mon1.m_name, pos2d.m_x, pos2d.m_y가 한줄에 다 써지고 이후에 endl이 적용이 되던데 왜 이런지 궁금합니다 사진도 첨부했습니다
- 미해결홍정모의 따라하며 배우는 C++
char 배열의 주소를 알고 싶습니다
for문으로 char형 배열의 주소를 알아보려고 했는데 출력결과가 이렇게 나옵니다. cout 때문에 이렇게 나오는 것 같은데 어떻게 하면 char형 배열의 주소를 알 수 있을까요?