월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
friend함수 관련 질문이 있습니다.
class Cents { private: int m_cents; public: Cents(int cents = 0) { m_cents = cents; } //생성자 int getcents() const { return m_cents; } friend Cents operator + (const Cents& c1, const Cents& c2) { return Cents(c1.m_cents + c2.m_cents);// 안으로 들어왔기 때문에 getcents()함수를 통해서 접근할 필요가 없음. } };이렇게 클래스 안에서 정의한것과 class Cents { private: int m_cents; public: Cents(int cents = 0) { m_cents = cents; } //생성자 int getcents() const { return m_cents; } friend Cents operator + (const Cents& c1, const Cents& c2); }; Cents operator + (const Cents& c1, const Cents& c2) { //return Cents(c1.getcents() + c2.getcents()); return Cents(c1.m_cents + c2.m_cents); }이렇게 밖에서 정의하는것의 차이가 궁금합니다.강의 마지막 부분에 클래스 부득이하게 멤버변수라던지 등등이 선언이 안되서 컴파일 에러가 발생하기 때문에 아예 존재한다 정도만 알려주는 선에서 미리 선언만 클래스 내부에서 하고 정의는 아예 밖에서 해버리는 케이스를 예로 들면서 설명해주셨는데요 오직 이런 상황만이 저렇게 friend함수를 외부에서 정의하는 이유에 해당되는지 아니면 주된 목적이 따로 있는지 궁금합니다. 요약.1.friend함수를 클래스 내부or외부 에서 정의할때 기능적인 차이 혹은 이유가 존재하는지??
- 해결됨홍정모의 따라하며 배우는 C++
operator+ 정의부분에서 궁금한 것이 있습니다.
Cents operator+(const Cents& right_value) { return (this->cents_ + right_value.cents_);//추상적인 클래스는 return by reference가 불가능함! }에서 교수님께서는 return Cents(this->cents_ + right_value.cents_); 라고 입력하셨는데, getCents()의 오버로딩을 통한 함수 호출이 아니라서 사실상 return 뒤에 Cents를 안 붙여도 정상적으로 작동하던데 이게 맞나요?두번째로, 다른 분들의 질문 글을 참조하였는데, 클래스를 반환하는 것이 아닌 아래와 같이 void를 반환하고friend void operator+(const Cents & c1, const Cents & c2) { cout << c1.m_cents + c2.m_cents << endl; } int main() { Cents cents1(6); Cents cents2(8); cents1 + cents2; // 14 도 정상적으로 작동하는데 클래스를 반환하는 것과 void를 반환하는 것중 어느게 더 속도가 빠른가요??마지막으로, non-member function으로 오버로딩을 할 때 cents1과 cents2는 각각 다른 주소에 멤버변수가 저장되어 있어서 operator+가 private에 접근하려면 friend를 선언해야 한다는 제 이해가 맞을까요??
- 미해결홍정모의 따라하며 배우는 C++
3분 17초 질문
강의 3분 17초 기준10번줄에 나온 ptr1(res) 부분에 대하여 질문 있습니다.저렇게 되면 "ptr1이 res에 대한 소유권을 가진다"는 것은 알겠으나, ptr1이 outer block을 나가면서 res도 같이 지워진다는 것이 잘 이해가 안됩니다.10번 줄의 의미가 "res라는 포인터가 있고, 이 포인터를 ptr1이 가리키는 형태"가 아닌, move로 res가 ptr1으로 옮겨진 것인가요?왜 "ptr1이 사라짐 = res도 같이 사라짐"이게 되는 것인가요?
- 해결됨홍정모의 따라하며 배우는 C++
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
안녕하세요. 우선 질문을 좀 많이 드려서 죄송합니다.15분 6초를 보면 something.getValue()에 10을 대입하는내용이 나오는데요. const가 없는 instance에는 10이 대입이 되고 const가 있으면 안된다는 내용은 이해를 했습니다. 그런데 함수에 값을 대입한다는 개념 자체가 이해가 되지 않습니다. 여기서 something.getValue() 함수는 그냥 m_Value를 return하는 함수인데 이런 함수에 왜 숫자가 대입이 되는건지 이해가 되지 않으며 10을 대입시키면 그 10은 어디로 가는건지도 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C++
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
안녕하세요!본 강의에서 attribute에 const를 사용할 때 제일 뒤에 const를 붙이셨잖아요. 다른데서는 const가 다 앞에 붙는데 attribute에만 뒤에 붙이는 이유가 따로 있을까요?
- 해결됨홍정모의 따라하며 배우는 C++
const Something &st에서 const를 빼면 안되나요?
안녕하세요!수업시간 11분 20초에서요.void print(const Something &st)에서 const와 &를 넣는 이유가 instance를 복사하지 않고 referance로 가져와서 사용하기 위한 것이고 그렇게 하면 main에 만들어진 instance와 print 함수 안에 사용되어진 instance가 주소가 같다고 설명해주셨잖아요.그런데 이렇게 &를 사용하는거면 앞에 const가 없어도 되지 않나요? 여기에 const가 들어가는 이유는 뭔가요?
- 미해결홍정모의 따라하며 배우는 C++
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
#include <iostream> #include <string> using namespace std; class Friend1 { private: string name; friend void Friend2::set_name(Friend1& f, string s); friend void Friend2::show_name(Friend1& f); }; class Friend2 { public: void set_name(Friend1& f, string s) { f.name = s; } void show_name(Friend1& f) { cout << f.name << endl; } }; int main(void) { Friend1 f1; Friend2 f2; f2.set_name(f1, "abc"); f2.show_name(f1); return 0; }Friend2 의 멤버함수인 set_name과 show_name을 클래스 Friend1에 friend선언을 해 주려 합니다. 하지만 private한 name 변수에 접근할 수 없다는 이유로 작동하지 않습니다.이런 구조로 코드를 작성하는 방법은 없을까요? 아니면 전역함수만 friend 선언이 가능한 걸 까요?
- 해결됨홍정모의 따라하며 배우는 C++
연쇄호출에 대해 질문있습니다!
안녕하세요!강의에서 10분경에 연쇄호출을 설명해주셨잖아요.보면 add함수, sub함수, mult함수 다 앞에 Calc&를 붙혀서 클래스 안에 있는 함수들이 서로를 참조할 수 있게만들었는데, 왜 print함수에는 Calc%를 붙이지 않고 void를 그대로 사용하나요? 그리고 그럼에도 불구하고 왜 cal.add(10).sub(1).mult(2).print();가 정상적으로 작동하나요?
- 미해결홍정모의 따라하며 배우는 C++
2:08 질문
2:08초에서 10번째 줄 생성자가 default constructor이라고 나오는데, default constructor가 아닌것 같아서 질문 올립니다. default constructor이라면 괄호 안에 인자가 없어야 하는 것이 아닌가요?
- 해결됨홍정모의 따라하며 배우는 C++
구글에 검색해보면 heap 사이즈랑 stack 사이즈가 같게 나와요.
안녕하세요!본 강의에서 stack은 heap보다 용량이 작은 대신에 빠르다고 설명해주셨잖아요. 그런데 구글링을 해보면 둘 다 default 사이즈가 1mb라고 나와요.캡쳐된 사진은 마이크로 소프트 웹사이트에 나와있는 설명인데요. 강의 내용과 웹사이트 설명이 달라서 그러는데 혹시 제가 어떤 부분을 잘못 이해하고 있는 걸까요? 좀 알려주세요.
- 해결됨홍정모의 따라하며 배우는 C++
Something::_init Something::s_initializer; 의 의미는 무엇인가요??
제목 그대로 궁금한데요. Something::_init이 Something 클래스 안에있는 init클래스까지는 이해가 됩니다. 그런데 왜 _init 옆에 또 Something을 써줘야하나요??
- 미해결홍정모의 따라하며 배우는 C++
혹시 강의마다 교수님께서 작성하신 소스코드 전반을 알 수 있을까요??
먼저 양질의 퀄리티 강의를 제공해주신 교수님께 감사의 말씀을 드립니다.그런데, 어떤 강의에서는 동영상에서 소스코드를 왔다갔다 움직이셔서 보고 따라 치기가 힘들더라구요. 혹시 "홍정모 공식 카페"에 따배씨++에 관한 소스코드가 제공되어 있을까요?? 그렇지 않다면, 어디서 리소스를 얻을 수 있을까요? 감사합니다 :)
- 해결됨홍정모의 따라하며 배우는 C++
static_assert 매개변수 관련 질문
#include <iostream> #include <vector> #include <cassert> using namespace std; void printVector(vector<int>& temp, const int index) { assert(index >= 3); static_assert(index >= 3, "index should be less than 3");//여기서 컴파일 에러 } int main() { std::vector<int> vec{ 1,2,3,4,5 }; printVector(vec, 3); }static_assert 에서 에러가 나는데매개변수를 const 상수화 해도 static_assert문에서 에러가 나는 이유가 뭔가요?
- 해결됨홍정모의 따라하며 배우는 C++
m_b를 출력하는 방법이 궁금합니다.
안녕하세요!5:43에 나와있는 코드에 관한 질문인데요.클래스 안에 클래스를 만들어서 출력을 하는 코드인데강의에서는 디버거로 어떻게 돌아가는지만 보여주시고클래스 안에 있는 클래스의 멤버값을 출력하는 방법은안 보여 주시더라고요.그래서 직접 해봤는데 에러가 뜨네요 ㅠ혹시 왜 에러가 뜨는지, 그리고 어떻게 하면 출력이 되는지 여쭤봐도 될까요?
- 해결됨홍정모의 따라하며 배우는 C++
생성자 멤버 초기화 목록을 만든 다음에 아래에 { }는 왜 꼭 있어야 하나요?
안녕하세요!선생님께서 수업시간에 설명해주신 코드를 따라쳐보니생성자 멤버 초기화 목록 아래에 남아있는 {}를 없애니까에러가 뜨더라구요.강의에서도 선생님께서 { }를 빈칸으로 두시던데그게 맞는건가요?{ }는 안에 멤버들을 집어넣어서 초기화 할 때 사용하잖아요. 멤버 초기화 목록을 사용하면 없어도 되는 것 같은데 굳이 비어있는 { }를 남겨두는게 이상해서 질문드립니다.
- 해결됨홍정모의 따라하며 배우는 C++
이 강의 가장 마지막에 설명해주신 first()와 second()는 함수인거죠?
안녕하세요!강의 가장 마지막에class 안에 class를 선언하면 안에 들어가있는 class가먼저 호출되고 그 다음에 나머지 class가 호출된다고설명해주셨잖아요.그런데 그 부분 설명해주실 때요.class First{ Second sec;public: First() { cout << "class First Constructor()" << endl; }};여기서 사용된 First()는 함수인가요 constructor인가요?constructor에 parameter가 없다면 ()를 쓰면 안된다고 배웠는데, First에는 ()가 있으니까 constructor가 아니라 함수인가보다 생각하고 있었는데, cout으로 class First Contructor이라고 출력을 하니까 이게 함수인지 생성자인지 헷갈리네요 ㅠ
- 미해결홍정모의 따라하며 배우는 C++
( )로 초기화를 하는 걸 뭐라고 부르나요?
안녕하세요!앞 강의에서 설명을 해주셨던 것 같은데,필기를 안해놔서 기억이 안나서 질문드려요.{ }으로 초기화를 한 것을 uniform initialization이라고 하잖아요.그럼 ( )으로 초기화를 한 것은 명칭이 뭔가요?
- 미해결홍정모의 따라하며 배우는 C++
제가 이해한것 정리해봅니다 맞는지 확인 부탁드려요
Resource &operator = (Resource& res) // '='연산자 오버로딩 함수 (반환값이 Resource, 이고 &는 왜 붙는지 모르겠음 '='를 써주는 것처럼 하나의 약속인가요?) { std::cout << "Resource copy assignment" << std::endl; if (&res == this) return *this; //파라미터로 들어온 객체와 &operator함수를 실행중인 객체가 같은가? if (this->m_data != nullptr) delete[] m_data; //다르다면 현재 함수를 실행중인 객체의 m_data가 있으면 비워주고 m_length = res.m_length; //자신의 m_length에 파라미터로 들어온 객체의 m_length로 채워주고 m_data = new int[m_length]; //자신의 m_data의 메모리를 m_length만큼 동적할당해준 뒤 for (unsigned i = 0; i < m_length; ++i) m_data[i] = res.m_data[i]; //자신의 m_data에 파라미터로 들어온 객체의 m_data를 복사해서 넣는다. return *this; //이 함수가 종료되면 나 자신의 객체의 주소를 반환한다. 반환값이 Resource클래스인데 어떻게 포인터로 가능하죠? }
- 미해결홍정모의 따라하며 배우는 C++
stdafxh에 관한 오류
1.09 강의에서는 교수님 코드를 보면 stdafx.h를 인클루드 하셨길래 저도 따라해보려 하니 미리컴파일된 헤더 관련해서 #include "stdafx.h"가 오류가 나더라구요 구글링을해보니 저 #include "stdafx.h"을 쓰면 좀 더 빠르게 컴파일?된다는거 같아서 프로젝트 설정에서 미리컴파일된 헤더 사용안함에서 사용으로바꾸고 해봐도 오류가 나서 일단은 기본대로 사용안함하고 #include "stdafx.h"이 코드도 안적고 하고있는데 미리컴파일된 헤더사용을 하려면 어떻게 설정해야될까요 ?감사합니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결홍정모의 따라하며 배우는 C++
too long이 나오는 이유 그냥...
언더플로우 일어난거 아닌가요?이 부분 입니다!