#include <iostream>
using namespace std;
class classA
{
public:
classA();
~classA();
};
class classB : public classA
{
public:
classB();
~classB();
};
classA::classA()
{
cout << "A" << endl;
}
classA::~classA()
{
cout << "~A" << endl;
}
classB::classB()
{
cout << "B"<< endl;
}
classB::~classB()
{
cout << "~B" << endl;
}
int main()
{
cout << "START" << endl;
classB *B = new classB;
classA *A = B;
delete A;
return 0;
}

classA 소멸자에 virtual을 사용해서
START A B ~B ~A : 부모소멸자가 먼저 실행되고 자식 소멸자가 실행된다.



상속을 받은 클래스의 생성과 소멸 과정을 본경우 생성과정의 경우 부모클래스의 생성자함수가 먼저 실행되는 경우를 볼수가 있다 하지만 소멸과정의 경우 자식클래스의 소멸함수가 먼저 실행되고 부모클래스의 소멸과정이 실행된다 그런데 다형성 이용을 위해 부모클래스 포인터로 부터 자식 클래스를 호출할떄 가상함수로 정의되지 않은 자식 클래스의 오버라이딩이 된 함수를 호출하면 부모클래스의 멤버 함수가 호출이 되고 소멸자 자식 클래스에서 오버라이딩된 함수라고 볼 수 있기 떄문에 만약 부모포인터로 부터 객체를 삭제하면 부모 클래스의 소멸자가 실행이 되어 자식클래스의 소멸자가 실행 되지 않는다.
 
하지만 Virtual를 사용 되었다면 이것은 자식클래스에서의 재정의 될 수 있음을 명시하기 떄문에 포인터의 종류에 상관없이 항상 자식 클래스의 메소드가 실행된다 . 결과적으로 자식클래스의 소멸자가 호출되고 부모 클래스의 소멸자가 호출된다.












공감로그인을 필요로 하지않습니다.


공감





예외처리

말 그대로 예외적으로 일어나는 상황을 처리하는 것


정확한 정의가 궁금하면 검색하면좋아요


try : 예외가 발생할만한 코드 블록을 지정하는데 try 다음의 { } 괄호안에 예외 처리 대상 코드를 작성한다. 이 블록 안에서 예외가 발생했을 때 throw 명령으로 예외를 던진다.


throw : 프로그램이 정상적으로 실행될 수 없는 상황일 때 이 명령으로 예외를 던진다. throw 다음에 던지고자 하는 예외를 적는다. 예외를 던진다는 것은 예외가 발생되었다는 것을 알리며 이 예외를 처리하는 catch문으로 점프하도록 한다. throw 명령 아래쪽의 코드들은 모두 무시되며 곧바로 예외 처리 구문으로 이동한다.


catch : try 블록 다음에 이어지며 던져진 예외를 받아서 처리한다. 그래서 catch 블록을 예외 핸들러라고 부른다. catch 다음에는 받고자 하는 예외의 타입을 적는데 이 객체는 throw에 의해 던져진다. catch 블록에는 예외를 처리하는 코드가 작성된다.
 
예외 처리 구문
try {
     if (예외 조건) throw 예외 객체;
}
catch (예외 객체) {
     예외 처리
}


#include <iostream>
using std::cout;
using std::cin;
void main() {
int a, b;
cout << "a 입력\n";
cin >> a;
cout << "b 입력\n";
cin >> b;
try {
if (a==0) throw a;
else if (b == 0) throw b;
cout << a / b;
}
catch (int exp) { //throw 에서 보낸 것을 받음
cout << "0ㄴㄴ";
}
}

try애서 a또는 b가 0일경우에 throw로 그값을 보내고

cout << a / b; 부분으 실행하지 않는다.

그리고 cout << "0ㄴㄴ";을 실행














공감로그인을 필요로 하지않습니다.


공감





'IT > 기타' 카테고리의 다른 글

Visual Studio코드 정리 단축키  (0) 2018.06.30
톱니바퀴 만들기  (0) 2018.06.30
Hello, world!  (0) 2018.06.30
#include <iostream>
using std::cout;
void main() {
cout << "Hello, world!";
}




'IT > 기타' 카테고리의 다른 글

톱니바퀴 만들기  (0) 2018.06.30
윈도우 정품인증  (0) 2018.06.30
Hello, world!  (0) 2018.06.30

+ 최근 게시물