비쥬얼 컴파일러에서 가능하게한 문법파괴(구조체와 클래스)

// 비쥬얼 컴파일러에서 가능하게한 문법파괴




////////////////////구조파괴1 (구조체안에 생성자,소멸자 가능) 
struct st_A{
int a;
};

st_A tempA = { 10 };

struct st_B{
int a;
//구조체안에 생성자 가능
st_B()
{
a = 10;
}
};

st_B tempB;




 
////////////////////구조파괴2 ( 구조체도 접근제어가능 )
//구조체안에 접근제거 가능
struct st_C{
//private사용
private:
int a;
};



 

////////////////////구조파괴3 (클래스도 typedef 가능)
//기본
typedef struct st_D{
//private사용
private:
int a;
}TAGD, *pTAGD;

TAGD temp3; //걍 변수
pTAGD temp4; //포인터

//파괴
typedef class CSK{
public:
int m_a;
}NSK, *pSK;

NSK temp5;
pSK temp6;




////////////////구조파괴4 (구조체도 상속가능)
struct StudentA{
};

struct StudentB : public StudentA
{
};




////////////////구조파괴5
StudentB temp7;




////////////////구조파괴6
struct St_Person{
int m_a;

St_Person()
{
m_a = 20;
}

};


struct st_User : St_Person{          //public 상속 안서도됨
int m_u;
st_User()
{
m_u = 10;
}

};

 

St_Person* pUser = new st_User;
st_User* ptemp = (st_User*)pUser; //이렇게 잡아주는것도 가능

printf("%d", ptemp->m_u); //다 가능

//당연한 말이겠지만  구조체도 포함또는 상속이 가능



*구조체와 클래스의 가장 큰차이점은?!?! 
-> 기본 접근 제어의 차이 (구조체 디폴트: public 클래스 디폴트: private )




결론
다시말하지만
이 문법 파괴는 비쥬얼 컴파일러가 지원해주는것이라 가능한것이다!
원래는 안되는것이다!!!!!!!!(MS사에서 만든 허용) 
그래서 허용되는것이지 C언어 문법이라고 생각해서는 안되는것이다.
언젠가 다른 언어의 컴파일러에서 왜 안돼지? 이러면 낭패.... 

이 글을 공유하기

댓글

Designed by JB FACTORY