반응형
가상함수와 디폴트 파라미터
가상함수 override 시에는 디폴트 파라미터 값 설정 변경에 주의해야 한다.
[예제] 가상함수와 디폴트 파라미터
#include <iostream>
class Base
{
public:
virtual ~Base() {};
virtual void foo(int n = 10) { std::cout << "Based: " << n << std::endl; } // 1
};
class Derived : public Base
{
public:
virtual void foo(int n = 20) override { std::cout << "Derived: " << n << std::endl; } // 2
};
int main()
{
Derived d;
Base* p = &d;
p->foo(); // ???
}
가상함수 이기 때문에 파생 클래스(Dereived) 함수가 호출된다.
하지만 default parameter 는 기반 클래스(Base)로 결정되었다.
이는 디폴트 파라미터는
컴팡이러가 컴파일 시간에 값을 채우지만
가상함수는 실행시간에 결정하기 때문이다.
그렇기에
가상함수 override 시에는 디폴트 값을 변경하지 말아야 한다.
📌 [C++] 가상 함수 (virtual funciton)
[C++] 가상 함수 (virtual funciton)
가상 멤버 함수 (virtual function)동적 바인딩을 위해 사용class A{public: virtual void sub(void);}; [예제] 함수 재정의(overriding) 주의사항#include class Animal{public: void Cry() { std::cout Cry(); // ??? -> Dog? Animal?}Q) p-
zoosso.tistory.com
📌 [C++] 디폴트 파라미터(default parameter)
[C++] 디폴트 파라미터(default parameter)
디폴트 값이란"기본적으로 설정되어 있는 값"을 의미한다. 함수 호출 시 파라미터(parameter)에 전달 될아규먼트(argument)가 부족할 경우대신해서 전달되는 값이기도 하다.※ 아규먼트(argument, 인
zoosso.tistory.com
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] RTTI (Run-Time Type Information) (2) | 2025.02.28 |
---|---|
[C++] 추상 클래스 (abstract class) (1) | 2025.02.26 |
[C++] 가상 소멸자 (3) | 2025.02.24 |
[C++] 함수 바인딩 (Funciton Binding) (3) | 2025.02.22 |
[C++] mutable 키워드 (1) | 2025.02.21 |
댓글