코드에서 액세스 지정자 (공개 / 보호 / 개인)를 변경하면 해당 프로그램의 동작이 변경되는 C ++ 프로그램의 경우가 있는지 궁금합니다.
본질적으로 순전히 런타임에 발생하는 한 가지 흥미로운 예는 프로그램이 액세스 수준에서 파생 된 일부 정보를 알아야한다는 것을 의미합니다. [except.handle] /3.2 에 따라 예외 처리기가 명확하고 공개적인 기본 클래스를 허용하면 예외 처리기가 예외 개체와 일치합니다. 예외 객체의 클래스 유형.
#include <iostream>
class Base {};
void test(void (*thrower)()) {
try {
thrower();
} catch (Base&) {
std::cout << "Caught a Base." << std::endl;
} catch (...) {
std::cout << "Not a Base?" << std::endl;
}
}
class D1 : public Base {};
class D2 : private Base {};
int main() {
std::cout << "Test D1" << std::endl;
test([]() { throw D1{}; });
std::cout << "Test D2" << std::endl;
test([]() { throw D2{}; });
}
이것은 다음을 인쇄합니다.
Test D1
Caught a Base.
Test D2
Not a Base?
... 사이의 유일한 차이에도 불구 D1
하고 D2
액세스 지정자 키워드의 변화입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다