아래 두 개의 간단한 클래스가 있습니다. 하나는 기본 클래스이고 다른 하나는 기본 클래스입니다.
파생 클래스에는 기본 및 파생에 필요한 모든 인수를 사용하는 생성자와 기본 클래스 참조 자체를 인수로 사용하는 생성자가 있습니다.기본 클래스를 인수로 취한 파생 클래스 생성자 (좋은 연습인가요?)
인자로 기본 클래스 참조를 취하는 생성자는 좋은 습관이 아닙니다.
그러나 좋은 연습으로 간주되지 않는 이유는 무엇입니까? 다른 생성자와 동일한 작업을 수행합니다.
누군가가 왜 좋은 OOP 실천이 아닌지 명확히 할 수 있습니까?
class Base
{
public:
Base(int a, int b):
m_a(a),
m_b(b)
{}
Base(const Base& b):
m_a(b.m_a),
m_b(b.m_b)
{}
~Base() {}
protected:
int m_a;
int m_b;
};
class Derived : public Base
{
public:
// Constructor which takes base class argument and initializes base
Derived(Base &base, int c):
Base(base),
m_c(c)
{}
Derived(int a, int b, int c):
Base(a, b),
m_c(c)
{}
~Derived() {}
private:
int m_c;
};
int main()
{
Base base(1,2);
Derived derived1(base, 3); //
Derived derived2(1,2, 3);
}
당신은 이것이 좋은 습관이 아니라는 것을 어디에서 발견 했습니까? – nitish005
나는 그것이 주로 당신의 디자인에 달려 있다고 생각합니다. ''Derived''가''Base'' 나 래퍼의 확장 인 경우, 왜 안됩니다! 하지만 구현시 문제가 발생할 수 있습니다. 주로 포인터를 사용하고 매번 복사하지 않을 경우 (주의 깊게''Base''를 구현해야합니다). ''Derived''를''Base''에서 독립적 인 것으로 생각하거나 구현을 감추고 싶다면 그렇게 좋은 습관이 아닐 것입니다. – NikolayKondratyev