class AcctABC
{
private:
string fullname;
long accNum;
double balance;
protected:
struct Formatting
{
ios_base::fmtflags flag;
streamsize pr;
};
const string& FullName() const { return fullname; }
long AcctNum() const { return accNum; }
Formatting SetFormat() const;
void Restore(Formatting& f) const;
public:
AcctABC(const string& s="Nullbody", long an=-1, double bal=0.0);
void Deposit(double amt);
virtual void Withdraw(double amt) = 0;
double Balance() const { return balance; };
virtual void ViewAcct() const = 0;
virtual ~AcctABC()
{
//empty
}
};
지금 상속부분 공부중인데...모르는게 있어서...
이런 추상화 클래스가 있는데 메서드들을 protected에 선언 정의를 했는데 이게 무슨 효과인지 잘 모르겠습니다
책에서는 protected 메서드들은 파생 클래스 객체를 위한 public 인터페이스를 통하지 않고, 파생클래스 메서드가 직접 호출 할 수있는 메서드 이다..
라고 했는데 이 문장이 잘 이해가 가질 않습니다요.public에 선언 정의해도 똑같이 파생클래스에서 쓸수 있던데..
멤버 변수를 proteced에 선언하면 파생클래스에서 기초클래스의 메서드를 사용하지않고 파생클래스에서 제약없이 직접 접근 할 수있어서
이건 이해가 쉬운데, 멤버함수는 이해가 잘 가질 않습니다요 형님들..
쉽게 이해좀 시켜주실수 있나요?
클래스 정의에선 접근가능
객체에선 접근불가
obj.FullName();//error
protected 는 ... 오버라이딩이 안됩니다. 15 년전 지식이니 확인해보세요.
코딩갓무사 // 형님 그럼 파생클래스의 객체로 멤버연산자?를 통한 호출은 안되고 파생클래스 정의 내( { } ) 내에서만 호출 할 수있는 건가여?
ㅇㅋ 내부에선 가능 외부에선 불가능
private를 상속하면 내부더라도 완전히 같은클래스에서만 가능 파생클래스에선 내부에서조차 불가
형님 private를 상속하신다 하셨는데 클래스 상속말씀하시는 거에여 아니면 멤버 상속말씀하시는건지?
private 메서드 혹은 멤버변수를 public으로 상속
상속 자체를 private나 protected로 하는건 고인물 코딩하는거니까 나중에 알아보셈 자주쓰는건 아님
감사합니다 형님 배워갑니다