개발

[Basic C++] #5_메서드 종류, static 메서드, const 메서드 C++ 클래스 내부에서 사용되는 메서드의 종류에 대해서 알아보겠습니다. "전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다. #0. static 메서드 class A { public: ... private: static std::string DoubleToString(double val); static double StringToDouble(const std::string& str); }; 데이터 멤버와 마찬가지로 메서드 또한 특정 클래스의 모든 객체에 공통적으로 적용되어야 할 경우 "static" 키워드와 함께 선언합니다. "static" 메서드의 경우, 구현 부분에서 "static" 키워드를 적을 ..
[Effective C++] #41 템플릿, 암시적 인터페이스, 컴파일 타임 다형성, 유효 표현식 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 7장 "템플릿과 일반화 프로그래밍", 항목 41 "템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터"에 해당하는 내용입니다. 클래스, 명시적 인터페이스, 런타임 다형성 class Widget { public: Widget(); virtual ~Widget(); virtual std::size_t size() const; virtual void normalize (); void swap(Widget& w); ... }; Widget 클래스 객체는 Wid..
[Effective C++] #40 다중 상속 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 40 "다중 상속은 심사숙고해서 사용하자"에 해당하는 내용입니다. 다중 상속 MI(다중 상속)이란, 어떤 클래스가 두 개 이상의 상위 클래스로부터 상속받는 형태를 말합니다. 이번 항목에서는 다중 상속 사용 과정에서 주의할 점과 적절한 상황 등을 살펴보겠습니다. 1. 모호성 문제 class A { public: void checkOut(); ... }; class B { private: void checkOut(); ... }; class C : public A, public B..
[Effective C++] #39 private 상속 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 39 "private 상속은 심사숙고해서 구사하자"에 해당하는 내용입니다. private 상속의 특징 class Person {...}; class Student : private Person {...}; void Eat(const Person& p){...}; Person* p; Student* s; Eat(p);//OK! Eat(s);// NO! private 상속의 의미는 "is-implemented-in-terms-of"입니다. private 상속의 첫 번째 동..
[Effective C++] #36 비 가상 함수의 상속, 바인딩 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 36 "상속받은 비 가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물!"에 해당하는 내용입니다. 비 가상 멤버 함수 class A { public: void mf();// 비 가상 멤버 함수 virtual void mf2();// 가상 멤버 함수 ... }; class B : public A {...}; 기본 클래스에 대한 public 상속은 "is... a" 상속입니다. 이전 항목에서 다뤘던 내용입니다. public 상속이란, 클래스 "B"를 클래스 ..
[Effective C++] #35 Public 가상 함수의 대안, NVI, 전략 패턴 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 35 "가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자"에 해당하는 내용입니다. 가상 함수 class someClass { public: virtual int virtualFunc() const; ... }; 가상 함수의 선언은 파생 클래스로 하여금 인터페이스와 기본 구현을 제공받도록 하고, 각 파생 클래스의 필요에 의해 재정의 할 수 있도록 해줍니다. 멤버 함수들의 인터페이스 상속과 구현 상속 관련 내용은 링크를 참..
[Effective C++] #34 인터페이스 상속, 구현 상속, 차이점 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 34 "인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자"에 해당하는 내용입니다. 인터페이스 상속, 구현 상속 class Shape { public: virtual void draw() const = 0;//순수 가상 함수 virtual void error(const std::string& msg);//단순 가상 함수 int objectID() const; //비가상 함수 ... }; class Rect : public Shape{...}..
[Effective C++] #20 값에 의한 전달, 참조자에 의한 전달 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 4장 "설계 및 선언", 항목 21 "함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자"에 해당하는 내용입니다. 참조자를 반환하는 함수 class Rational { public: Rational(const int numerator, const int denominator) :n(numerator), d(denominator){} private: int n, d; friend const Rational operator*(const Rational& lhs, const Rationa..
[Effective C++] #20 값에 의한 전달, 참조자에 의한 전달 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 4장 "설계 및 선언", 항목 20 "값의 의한 전달보다 상수 객체 참조자에 의한 전달 방식을 택하는 편이 대개 낫다"에 해당하는 내용입니다. 값에 의한 전달 C++는 함수로부터 객체를 전달받거나, 함수에게 객체를 전달할 때 '값에 의한 전달' 방식을 사용합니다. '값에 의한 전달'은 함수의 매개 변수를 전달받은 인자의 사본을 통해 초기화됩니다. 더불어 반환 값 또한 함수가 반환한 값의 사본입니다. 사본을 만드는 동작은 복사 생성자의 호출을 의미하죠. 이러한 점 때문에 '값에 의한 전달'은 비효율..
[Effective C++] #19 클래스 설계 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 4장 "설계 및 선언", 항목 19 "클래스 설계는 타입 설계와 똑같이 취급하자"에 해당하는 내용입니다. 클래스 설계 함수와 연산자를 오버로드 하고, 메모리 할당 및 해제를 제어하며, 객체 초기화 및 소멸을 정의하는 작업이 클래스 설계입니다. 몇 가지 질문들에 대해 고찰하며, 효과적인 클래스 설계에 대한 방향을 짐작해 보겠습니다. 1. 객체 생성 및 소멸은 어떻게 이루어지는가? 이 질문을 통해, 우리는 클래스 생성자 및 소멸자의 설계를 준비합니다. 더불어, 메모리 할당 함수를 직접 작성할 경우에도 영향을 미칩니다. 2. ..
Hardii2
'개발' 태그의 글 목록