반응형
클래스를 쓰는 이유
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void print(const string& name, const string& address, const int& age,
const double& height, const double& weight)
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
int main()
{
string name;
string address;
int age;
double height;
double weight;
print(name, address, age, height, weight);
vector<string> name_vec;
vector<string> addr_vec;
vector<int> age_vec;
vector<double> height_vec;
vector<double> weight_vec;
print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);
return 0;
}
먼저 구조체 같은 타입을 쓰지 않았을 때 각각을 출력하는 것입니다. 저희는 이름, 주소, 나이, 키, 몸무게를 알고 싶을 때 한 사람마다 이렇게 번거로운 작업을 해야합니다.
그럼 구조체로 만들면 어떻게 될까요?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Friend
{
string name;
string address;
int age;
double height;
double weight;
};
void print(const string& name, const string& address, const int& age,
const double& height, const double& weight)
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
print(jj.name, jj.address, jj.age, jj.height, jj.weight);
vector<string> name_vec;
vector<string> addr_vec;
vector<int> age_vec;
vector<double> height_vec;
vector<double> weight_vec;
print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);
return 0;
}
이렇게 구조체를 만들 수 있습니다. 하지만 이 구조체도 다른 사람의 값을 출력해주려면 print를 통해 위와 같이 반복을 해주어야 합니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Friend
{
public: // access specifier ( public, private, protected)
string name;
string address;
int age;
double height;
double weight;
void print()
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
};
void print(const string& name, const string& address, const int& age,
const double& height, const double& weight)
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
jj.print();
vector<string> name_vec;
vector<string> addr_vec;
vector<int> age_vec;
vector<double> height_vec;
vector<double> weight_vec;
print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);
return 0;
}
객체라는 것은 데이터와 함수들을 출력해주는 기능을 하는 것입니다. 이것이 Object고 이 객체라는 개념을 프로그래밍 언어로 구현하는 것, 그 키워드가 class입니다. object라는 개념을 문법으로 구현할 때 class를 사용한다고 보면 됩니다.
Friend 자체를 사용자 정의 자료형처럼 사용하고 있는데요. 변수처럼 이름을 넣고 선언을 해줘야 메모리를 차지해주는 것이 jj입니다. 이런 것을 바로 instanciation이라고 합니다.
반응형
'IT 프로그래밍 > C++' 카테고리의 다른 글
[따배시 C++ 8.4] 생성자 멤버 초기화 목록, 위임 생성자 (0) | 2024.04.10 |
---|---|
[따배시C++] 8.3 생성자 (0) | 2024.04.10 |
[C++] 멤버함수 혹은 메서드 (0) | 2024.04.06 |
[C++]클래스와 객체 (0) | 2024.04.06 |
[C++] Inline 함수 , 함수 오버로딩, typedef (0) | 2024.04.03 |