소개
게시글
질문&답변
2024.10.06
쓰기용으로 열 수 없습니다.
안녕하세요? 질문&답변 도우미 Soobak 입니다. 제가 질문자님의 정확한 환경 설정을 잘 모르기 때문에 구체적인 답변을 드리기가 조금 어렵네요. 파일의 권한과 관련된 문제이므로, 가장 편한 방법은 Visual Studio 를 '관리자 권한으로 실행' (Visual Studio 를 실행하실 때, 마우스 우클릭을 통해서 확인하실 수 있습니다.) 해보시는 것을 추천드려봅니다.
- 1
- 2
- 8
질문&답변
2024.09.26
6분쯤에 getCents() 함수를 통하지 않는 방법으로 friend를 쓰셨는데..
안녕하세요? 질문&답변 도우미 Soobak 입니다. 일반적으로 클래스의 private 멤버에 접근할 때에는 getCents() 와 같은 public 멤버함수를 통해 접근합니다. 이 때, friend 키워드는 특정 함수나 클래스에 private 멤버에 직접 접근할 수 있는 권한을 부여합니다. 따라서, class Cents { private: int m_cents; public: Cents(int cents = 0) { m_cents = cents; } int getCents() const {return m_cents; } int& getCents() {return m_cents; } }; Cents operator + (const Cents &c1, const Cents &c2) { return Cents(c1.getCents() + c2.getCents()); // 이 부분에서 getCents() pulbic 함수를 통해 접근합니다. } 위와 같은 코드에서, friend 키워드를 통해 산술 연산자 오버로딩 부분을 한정하면, class Cents { private: int m_cents; 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); // firend 키워드로 한정 }; Cents operator + (const Cents &c1, const Cents &c2) { return Cents(c1.m_cents + c2.m_cents); // 이렇게 Cents 클래스의 private 멤버 변수인 m_cents 에 직접 접근할 수 있게 됩니다. } 위 코드처럼 클래스 외부에 선언된 산술 연산자 오버로딩에서 getCents() 함수를 통하지 않고도 Cents 클래스의 private 멤버 변수 m_cents 에 직접 접근할 수 있게 됩니다. 추가적으로, friend 키워드의 유/무와 관련된 산술연산자의 오버로딩의 더 자세한 설명은 강의의 이어지는 부분에서 더욱 자세히 학습하시게 됩니다. 또한, 이해에 도움이 되실 수 있는 연관 질문의 링크도 첨부드려봅니다. https://www.inflearn.com/questions/955706(링크) 추가적으로 궁금하신 부분이 있으시면 편히 댓글 남겨주세요.
- 1
- 2
- 20
질문&답변
2024.09.25
[4.2강] linker 에러 발생 관련 문의 드립니다.
안녕하세요? 질문&답변 도우미 Soobak 입니다. 추가 작성해주신 글의 말씀처럼 터미널에서 직접 명령어를 입력하여도 되지만, 그 과정을 VSCode 설정을 통해서 자동으로 진행될 수 있도록 할 수 있습니다. VSCode설정과 관련된 내용은 교수님의 무료 강의 코테용 C++ 핵심 정리의 환경 설정 강의(링크) 의 15:50 부분 이후의 내용을 참고하여 따라해보시면 도움이 되실 것 같습니다. 추가적으로, 해당 강의의 설정파일( .vscode 접두사 디렉토리들 중 환경에 맞는 디렉토리의 설정 파일을 참고해보시면 됩니다.)을 살펴보실 수 있는 강의 깃허브 링크를 첨부드립니다. https://github.com/HongLabInc/HongLabCppSummary(링크)
- 1
- 3
- 25
질문&답변
2024.09.24
class에 static초기화 안되는 이유가 뭔가요?
안녕하세요? 질문&답변 도우미 Soobak 입니다. static 멤버 변수의 초기화와는 다른 이유입니다. static 멤버 변수는 클래스의 '모든 인스턴스가 공유하는 변수' 입니다. 반면, const 멤버 변수는 각 객체마다 고유한 값을 가질 수 있지만, 한 번 초기화되면 변경할 수 없는 변수입니다. 따라서, 만약 const 멤버 변수를 클래스 정의에서 초기화하면, 모든 객체가 같은 값을 가져야 한다는 의미가 되므로, 객체마다 다른 값으로 초기화하는 경우에 대한 유연성이 떨어지게 됩니다. 이는 C++ 의 객체 설계 규칙과 관련이 있는 내용입니다. 하지만, C++ 11 버전 이후로는 절충된 설계와 함께 in-class initializer 라는 기능으로 말씀해주신 문법 또한 허용되었다고 합니다. (개인 로컬 환경에서 C++17 버전으로 설정 후 컴파일을 시도해보았더니, 문법 오류가 나지 않고 잘 컴파일이 되네요.) 관련 내용이 담긴 링크들을 첨부드립니다. - https://www.stroustrup.com/bs_faq2.html#in-class(링크) - https://stackoverflow.com/questions/14495536/how-do-i-initialize-a-const-data-member(링크)
- 1
- 2
- 22
질문&답변
2024.09.24
라이브러리 구조의 대한 질문
안녕하세요? 질문&답변 도우미 Soobak 입니다. 네, 정확하게 잘 이해하고 계십니다. 우선, 먼저 지금까지의 강의에서 링킹 과정, 헤더 파일, 함수의 선언과 정의, 라이브러리 각각에 대한 개념 학습으로 결론을 잘 유추해내신 점이 참 인상깊네요. 꼼꼼히 학습하신 것이 느껴져서 저에게도 좋은 자극이 되어주시는 것 같습니다. 감사합니다. 헤더파일( .h )과 라이브러리 파일( .lib 또는 .a )을 함꼐 사용하는 이유에 대해서 조금 추가 설명을 드려보면 다음과 같습니다. 인터페이스와 구현의 분리, 사용 편의성 등 : 말씀하신 내용처럼, 헤더파일에는 함수의 선언(프로토타입), 사용 방법, 매개변수, 반환 타입 등 인터페이스 정보를 제공하고 라이브러리 파일에는 실제 함수의 구현(정의)을 포함하도록 분리함으로써, 사용자가 함수의 내부 구현을 알 필요 없이 인터페이스만으로 쉽게 라이브러리를 사용할 수 있습니다. 보안, 정보 은닉 : 또한, 핵심적인 알고리듬이나 비즈니스 로직(이미 배경지식이 있으실 수도 있지만, 개발과 관련되어 자주 사용되는 중요한 용어 중 하나입니다. 만약, 낯설으시다면 키워드 검색으로 간단히 개념을 접해보시는 것을 추천드립니다. 질문 해주신 강의가 문법 강의이기 때문에 굳이 언급 드려봅니다.)을 라이브러리 파일에 숨겨 사용자에게 헤더 파일을 통해서는 필요한 정보만 제공하고, 소스 코드는 공개하지 않을 수 있습니다. 버전 관리와 호환성, 모듈화 및 재사용성 등 : 간단히 설명드려보면, 헤더 파일의 인터페이스를 유지하면서 라이브러리의 내부 구현을 변경할 수 있습니다. 따라서, 호환성을 유지하면서 성능 개선이나 버그 수정 등도 가능하게 됩니다. 추가적으로, 중간에 언급해주신 명시적 include 없이 라이브러리 사용이 가능한 이유에 대해서도, 말씀해주신 것 처럼 VisualStudio 의 기능이 맞습니다. 같은 프로젝트 내에서는 VisualStudio 가 자동으로 파일을 연결해주므로, 명시적으로 include 를 하지 않고 사용할 수 있습니다.
- 2
- 2
- 39