나는 당신의 기능을 가상 있습니다 참조 - 기본 매개 변수가 상속되지 않도록주의!
int getStuff(int n)
{
return n;
}
class MyClass
{
public:
static constexpr int DefaultParam1 = 48;
static constexpr int DefaultParam2 = 99;
virtual ~MyClass() = default;
virtual void function1(int param1 = DefaultParam1, int param2 = DefaultParam2) = 0;
inline void function2()
{
function1(getStuff(DefaultParam1), getStuff(DefaultParam2));
}
inline void function2(int param1)
{
function1(param1, getStuff(DefaultParam2));
}
virtual void function2(int param1, int param2) = 0;
};
예제에서 function2를 살펴 보겠습니다. 인라인 함수로 오버로드되었습니다. 장점 :
class MC : public MyClass
{
public:
virtual void function1(int param1, int param2)
{
}
using MyClass::function2;
virtual void function2(int param1, int param2)
{
}
};
int main()
{
MC mc;
((MyClass&)mc).function1();
mc.function2();
return 0;
}
function1
가 (상속하는 클래스를 반복하지 않고) 기본 매개 변수와 함께 사용할 수 캐스트가 필요 function2
은 (불행하게도, 당신은 상속 클래스의 오버로드를 볼 수 있도록하기 위해 사용 절을 필요로하지 않는다 그래도).
사이드 노트 : 나는 첫 번째 방법은 멤버 변수 대신 매개 변수의 사용
..., 난 그냥 대안을 보여주는거야 잘못되었거나 불량 상태입니다 말하는 게 아니에요? – felix
정의를 사용하는 데는 아무런 문제가 없습니다. 정의를 의미있는 이름으로 지정하면됩니다. 예 : NUMBER_OF_SECONDS_IN_A_DAY. – wmc
에 대한 멤버 vars : 합리적인 접근 방식처럼 보이지만, 나는 또한 반환 값을 저장하고 싶지 않지만 함수가 호출 될 때마다 호출하고 싶은 일부 함수에 의해 설정된 기본 인수가 있습니다. – juq