본문 바로가기
Programming/C, C++

C++ 구조체와 클래스의 코드로보는 차이점

by Dev_카페인 2022. 12. 20.
반응형

[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의 사용이 의미있다.
반응형