C++/Data Structures

C++ Data Structures

Soul-Learner 2016. 12. 22. 18:19

C++ 프로그래밍, 구조체 ( Data Structures )


C언어의 구조체와 C++의 구조체의 주요 차이점

  • C언어의 구조체에는 함수를 선언할 수 없지만 C++에서는 가능하다
  • C언어에 구조체에는 static 멤버를 선언할 수 없지만 C++에서는 가능하다
  • C언어의 구조체 변수를 생성할 때는 struct 키워드가 필요하지만 C++에서는 필요 없다
  • C언어의 구조체는 포인터 변수를 사용할 수 있지만 C++에서는 포인터, 참조 변수 모두 가능하다


#include <iostream>
#include <locale>

using namespace std;

struct User {
	wstring id;
	int pass;
};             // }과 ; 사이에 다수개의 구조체 변수를 쉼표(,)로 구분하여 선언할 수도 있다

void printUser(User user) {  // 구조체 값을 받아서 멤버를 출력하는 함수
	wcout << "id=" << user.id << ", pass=" << user.pass << endl;
}

void printUser(User* pUser) { // 구조체 주소를 받아서 멤버를 출력하는 함수
	wcout << "id=" << pUser->id << ", pass=" << pUser->pass << endl;
}

void printUserRef(User& user) { // 구조체 참조변수를 파라미터로 받는다
	wcout << "id=" << user.id << ", pass=" << user.pass << endl;
}

int main()
{
	setlocale(LC_ALL,"");
	wcout << L"C++ 구조체 다루기" << endl;

	// 구조체 변수 선언(C언어에서는 반드시 struct 키워드를 사용해야 했다. 그러나 C++은 필요 없음)
	User user1 = {L"김인철", 1111};  // 구조체 변수의 선언과 초기화를 동시에 하는 경우

	wcout << "id=" << user1.id << ", pass=" << user1.pass << endl;

	User user2;  // 구조체 초기화 두번째 방법
	user2.id = L"홍길동";
	user2.pass = 2222;

	wcout << "id=" << user2.id << ", pass=" << user2.pass << endl;

	// 구조체 포인터 변수
	User* pUser;
	User user;
	pUser = &user;
	pUser->id = L"박지성";
	pUser->pass = 3333;
	wcout << "id=" << pUser->id << ", pass=" << pUser->pass << endl;

	printUser(user1);  // 함수의 파라미터에 구조체 값을 전달
	printUser(pUser);  // 함수의 파라미터에 구조체 주소를 전달
	printUserRef(user2); // 구조체 참조 전달

    return 0;
}