c++ programming - 9th study
TRANSCRIPT
5
class Super{private:
int mPrivateInt;protected:
int mProtectedInt;public:
Super();void someMethod();
};
class Sub : public Super{public:
Sub();void someOtherMethod();
};
11
class Super{private:
int mPrivateInt;protected:
int mProtectedInt;public:
Super();virtual void someMethod();
};
14
class Sub : public Super{public:
Sub();virtual void someMethod();
};
void Sub::someMethod(){
std::cout << "Sub::someMethod()" << std::endl;}
15
class Sub : public Super{public:
Sub();void someMethod();
};
class Sub : public Super{public:
Sub();virtual void someMethod();
};
=
16
Super::someMethod()
Sub mySub;mySub.someMethod();
Sub::someMethod()
Super mySuper;mySuper.someMethod();
21
class Something{public:
Something() { std::cout << "2"; }}
class Parent{public:
Parent() { std::cout << "1"; }}
class Child : public Parent{protected:
Something mDataMember;public:
Child() { std::cout << "3"; }}
int main() {Child myChild; // 123
}
22
class Super {public:
Super(int i);}
class Sub : public Super {public:
Sub();}
Sub::Sub() : Super(7){
// ...}
Sub::Sub(int i) : Super(i){
// ...}
class Something {public:
Something() { cout << "2"; }virtual ~Something() { cout << "2"; }
}
class Parent {public:
Parent() { cout << "1"; }virtual ~Parent() { cout << "1"; }
}
24
class Child : public Parent {protected:
Something mDataMember;public:
Child() { cout << "3"; }virtual ~Child() { cout << "3"; }
}
int main() {Child child; // 123321
}
25
class Something {public:
Something() { cout << "2"; }~Something() { cout << "2"; }
}
class Parent {public:
Parent() { cout << "1"; }~Parent() { cout << "1"; }
}
class Child : public Parent {protected:
Something mDataMember;public:
Child() { cout << "3"; }~Child() { cout << "3"; }
}
int main() {Parent* ptr = new Child();delete ptr;
}
27
class Animal {public:
void printDesc() { cout << "Name of animal is "; }};
class Penguin : public Animal {public:
void printDesc() {printDesc();std::cout << "penguin." << std::endl;
}};
printDesc() = Penguin::printDesc()→ 재귀적으로 무한히 반복→ 스택 메모리 부족으로 인해 강제 종료
서브클래스에서 printDesc()를 오버라이딩→ 슈퍼클래스의 printDesc()를 사용해
동물의 이름을 출력하려고 함
28
class Animal {public:
void printDesc() { cout << "Name of animal is "; }};
class Penguin : public Animal {public:
void printDesc() {Animal::printDesc();std::cout << "penguin." << std::endl;
}};
31
void presumptuous(Super* inSuper){
Sub* mySub = static_cast<Sub*>(inSuper);mySub->someOtherMethod();
}