반응형
[C++] 구조체와 클래스의 코드로보는 차이점
구조체 보기
// 구조체 테스트
#include <iostream>
using namespace std;
struct _struct
{
// struct의 기본 접근 지정자는 public
double _double = 3.141592; // 8 byte // 되도록이면 큰 자료형이 위로 오도록 (바이트패딩)
int _int = 3; // 4byte
private : // 접근지정자의 사용이 가능함
int _pvInt = 6; // 4byte
void PrivateAccessTest() { cout << "Hello" << endl; }
// 상속구조가 아니기 때문에 쓸 일이 없음
protected :
int _pttInt = 9;
public :
// 구조체 내부에 정의시 inline 함수로 컴파일 됌
int GetPrivateInt() { return _pvInt; }
int GetProtectedInt();
};
// 구조체 외부 정의
int _struct::GetProtectedInt()
{
return _pttInt;
}
int main()
{
_struct srt;
// cout << srt._pvInt << endl; // 접근 지정자 때문에 액세스 불가
// cout << srt._pttInt << endl; // 마찬가지 Protected 접근 불가
// cout << srt.PrivateAccessTest() << endl; // 함수 또한 마찬가지
cout << "public Double Value : " << srt._double << endl; // public 접근 가능
cout << "public Int Value : " << srt._int << endl; // public 접근 가능
cout << "PrivateInt : " << srt.GetPrivateInt() << endl; // public 접근 가능
cout << "ProtectedInt : " << srt.GetProtectedInt() << endl; // public 접근 가능
}
- 구조체 struct의 기본 접근 지정자는 public이다.
- 바이트 패딩의 효율성을 위해 큰 자료형을 위에 선언한다.
- 클래스처럼 접근지정자 사용이 가능하다.
- protected접근지정자는 상속관계를 사용할 수 없기 때문에 불필요하다.
- 구조체 내부에 함수 정의시 inline함수로 컴파일된다.
- 구조체 함수는 외부에서 정의할 수 있다.
클래스 보기
#include <iostream>
using namespace std;
class _class
{
// class의 기본 접근 지정자는 private
double _double = 3.141592; // 8 byte // 되도록이면 큰 자료형이 위로 오도록 (바이트패딩)
int _int = 3; // 4byte
private: // 접근지정자의 사용이 가능함
int _pvInt = 6; // 4byte
void PrivateAccessTest() { cout << "Hello" << endl; }
// 상속구조가 가능하기 때문에 가끔 유용하게 쓰인다.
protected:
int _pttInt = 9;
public:
// 클래스 내부에 정의시 inline 함수로 컴파일 됌
int GetPrivateInt() { return _pvInt; }
int GetProtectedInt();
};
// 클래스 외부 정의
int _class::GetProtectedInt()
{
return _pttInt;
}
int main()
{
_class srt;
// cout << srt._pvInt << endl; // 접근 지정자 때문에 액세스 불가
// cout << srt._pttInt << endl; // 마찬가지 Protected 접근 불가
// cout << srt.PrivateAccessTest() << endl; // 함수 또한 마찬가지
// 구조체에서 되었던 것이 기본 접근지정자가 달라서 막히는 것
cout << "public Double Value : " << srt._double << endl; // private 접근 불가
cout << "public Int Value : " << srt._int << endl; // private 접근 불가
cout << "PrivateInt : " << srt.GetPrivateInt() << endl; // public 접근 가능
cout << "ProtectedInt : " << srt.GetProtectedInt() << endl; // public 접근 가능
}
- 기본 접근 지정자는 private
- 클래스 내부에 함수 정의시 inline함수로 컴파일된다
- 구조체와 다르게 상속구조가 가능하기 때문에 protected의 사용이 의미있다.
반응형
'Programming > C, C++' 카테고리의 다른 글
C++ 자주 사용되는 문법 (0) | 2023.09.15 |
---|---|
C++ Static 정적 클래스, 정적 멤버, static 변수, static함수 (0) | 2022.12.20 |
C++ 바이트 패딩 (Byte Padding) (0) | 2022.12.14 |
C++ 구조체 (structure type) (0) | 2022.12.14 |
C++ 파일 입출력 fstream ifstream ofstream (char배열, string) (0) | 2022.12.14 |