언어

#1. 개념 1. 디폴트 인자 활용 가상 함수를 오버라이딩?class Super{protected: virtual void SomeFunc(int val = 3) { cout 만약, Super 유형의 포인터를 Sub 유형의 객체를 가리키고, 가상 함수를 호출할 경우, Sub 유형의 가상 함수가 호출됩니다. 하지만! 가상 함수가 '디폴트 인자'를 활용할 경우, 직접 코드에서 활용하는 포인터 혹은 참조의 유형이 어떠한 함수를 호출할 것인지 결정하는 요소가 됩니다.   #2. 코드 class Super{public: virtual void go(int i=2) { cout Super super;Sub sub;Super& superRefToSub = sub;super.go(); /..
[Basic C++] #15_오버라이딩의 특수한 경우 세 번째 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. private 또는 protected 가상 멤버 함수를 오버라이드 할 경우 class Times { public: virtual int getTimesResult() const {return getDeafualtOperand() * getInputOperand;}// 디폴트 Operands 값 * 인자로 들어온 operands void setInputOperand (int i) {inputOperand = i;} void getInputOperand () {reutrn inputOper..
[Basic C++] #14_오버라이딩의 특수한 경우 두 번째 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 오버로딩 된 가상 함수를 오버라이딩 할 경우 class Suepr { public: virtual void Overload() {...} virtual void Overload(int i) {...} }; class Sub : public Super { public: virtual void Overload() {...} }; 특정 프로토타입을 가지는 가상 함수를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모 클래스의 모든 함수가 숨겨지게 됩니다. 쉽게 말해서, 특정 프로토..
#1. 개념 1. static 함수의 오버로딩class Super{public: static void StaticMethod() {cout 먼저, static 멤버 함수의 오버라이딩은 불가능하지만(static 가상 함수부터가 불가능),  static 멤버 함수의 오버로딩은 가능합니다.이때, static 멤버 함수는 정의된 클래스에 종속되어, 같은 이름의 멤버 함수 호출 시 참조된 클래스에 맞추어 실행됩니다. 따라서, 해당 함수는 호출 시 객체가 무엇이든 관계없이 접근하는 타입에 맞추어 직관적으로 어떤 static 멤버 함수를 호출할지 결정합니다.
#1. 개념 1. 순수 가상 함수class SomeClass{public: SomeClass(); virtual ~SomeClass(); virtual void setString(const std::string& inString) = 0; virtual std::string getString() const = 0;};SomeClass class1; // 에러 발생 SomeClass* class1 = nullptr; // 컴파일 Ok!!순수 가상 함수란 "=0" 키워드를 통해 함수의 선언부만 작성하고, 자세한 구현 내용은 작성하지 않고 이를 상속하는 하위 계층의 클래스들에게 해당 함수의 구현부 작성을 강제하는 함수입니다.순수 가상 함수를 선언한 클래스는 추상 클래스라고하며, 오직 순..
[Basic C++] #11_생성자의 상속 C++ 개발에서 베이스 클래스의 생성자를 상속하는 경우들을 살펴보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 슈퍼클래스의 생성자 상속, "using" 키워드 class Super { public: Super(const std::string& str); }; class Sub : public Super { public: using Super::Super;// using 키워드 사용을 통해 슈퍼 클래스의 생성자 사용을 명시적으로 선언 Sub(int i); }; // Sub 클래스 객체 생성 방법은 2가지가 됩니다. Sub sub1(1);//Sub 클래스 자체적으로 갖는 생성자 Sub sub1("Hello");//S..
[Basic C++] #10_오버라이드 키워드, override C++ 개발에서 베이스 클래스의 가상 함수를 오버라이딩 하는 구체적인 예제들을 살펴보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 오버라이드 키워드(override) class Super { public: Super(); virtual ~Super(); virtual void someMethod(double d); }; class Sub : public Super { public: Sub(); virtual void someMethod(int i) override;// 에러 발생! }; 먼저, "override" 키워드 사용의 필요성에 대해 복기해봅시다. 서브 클래스는 베이스 클래스에서 선언..
[Basic C++] #9_객체의 업캐스팅과 다운캐스팅, 슬라이싱 C++ 개발에서 객체의 업캐스팅과 다운캐스팅 방법과 특징들에대해 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 객체의 업캐스팅(up-casting), 슬라이싱 Sub mySub; Super mySuper = mySub;// 업캐스팅, 슬라이싱 발생! Super& mySuper = mySub;// 업캐스팅, 슬라이싱 미 발생! 업캐스팅이란, 상위 혹은 부모 클래스로 타입 캐스팅 하는 것을 의미합니다. 이때, 객체는 부모 클래스로 업캐스팅 되거나 부모 클래스의 객체에 대입할 수 있습니다. 이 과정에서, 캐스팅 혹은 대입이 일어나면서 자식 클래스만 갖는 특징들이 사라집니다. 이러한 현상을 ..
[Basic C++] #8_파생 클래스와 베이스 클래스의 연동, 생성 순서, 생성자 체이닝, 캐스팅 C++ 개발에서 상속을 통해 기본 클래스와 파생 클래스의 연동, 생성 순서 등에 대해 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. C++의 객체 생성 순서 C++의 객체 생성 순서는 재귀적으로 적용됩니다. 1. 베이스 클래스의 디폴트 생성자 호출 2. 클래스 데이터 멤버들의 선언 순서에 맞춰 생성 3. 생성자 바디 실행 class someClass { public: someClass() { cout
[Basic C++] #7_클래스 상속 활용 방법 C++ 개발에서 상속을 통해 클래스를 생성하는 방법에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 상속 // Parent Class 정의 class Super { public: Super(); ~Super(); void SomeMethod_1(); protected: int mProtectedInt; private: int mPrivateInt; }; // Child Class 정의 class Sub : public Super { public: Sub(); void SomeMethod_2(); }; 서브 클래스, 혹은 자식 클래스는 부모 클래스와 "is-a" 관계를 형성합니다. "is-a" ..
Hardii2
'언어' 카테고리의 글 목록 (12 Page)