본문 바로가기
프로그래밍 언어/C++

[C++] 가상함수와 디폴트 파라미터

by 까망 하르방 2025. 2. 27.
반응형

가상함수와 디폴트 파라미터

가상함수 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

댓글