클래스를 모를 때
#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;
void print(const string& name, const string& address, const int& age,
const double& height, const double& weight)
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
struct Friend
{
string name;
string address;
int age;
double height;
double weight;
};
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;
}
이렇게 해주면 구조체로 가는데요. 하지만 jj 말고 다른 친구가 생겼을 때 계속해서 추가로 만들어줘야 하기 때문에 아직도 번거로움이 있습니다. 그럼 structure을 하나로 받으면 어떻게 될까요ㅕ?
struct 안에 print 함수 넣기
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Friend
{
string name;
string address;
int age;
double height;
double weight;
void print()
{
cout << name << " " << address << " " << age << " " << height << " "
<< weight << endl;
}
};
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
print(jj);
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;
}
이렇게 jj.print() 만 해주면 저렇게 나오게 됩니다. 저런 식으로 데이터와 기능이 묶여있는 것을 object라고 합니다. structure에도 이런 식으로 function을 넣을 수 있는데 보다 더 많은 기능을 다룰 수 있게 만들어주는 것이 바로 class입니다.
저기에 있는 struct를 class로 바꿔주기만 하면 됩니다.
기능을 넣을 때는 class를 쓰기 때문에 class를 써주시면 됩니다. c++에서는 구조체 structure 안에도 function 이 들어갈 수 있는데 c는 안되기 때문에 class의 기능은 중요해집니다.
이것이 바로 class가 만들어지는 과정입니다.
vector를 각각 만들었는데 이제 더 편하게 가능한데요. 더 쉬운 방법을 사용하시면 됩니다. structure에는 public: 이나 이런 private:가 들어가진 않습니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Friend
{
public: //access specifier (public, private, protected)
string m_name;
string m_address;
int m_age;
double m_height;
double m_weight;
void print()
{
cout << m_name << " " << m_address << " " << m_age << " " << m_height << " "
<< m_weight << endl;
}
};
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 }; //instanciation, instance
jj.print();
vector<Friend> my_friends;
my_friends.resize(2);
for (auto& ele : my_friends)
ele.print();
return 0;
}
이렇게 바뀐 코드를 보면 이런식으로 깔끔해진 것을 볼 수 있습니다. 객체지향으로 하기 때문에 왜 객체지향이 필요한지 알 수 있습니다. c++에서는 이렇게 클래스가 나중에 나오지만 java에서는 바로 객체지향으로 들어갑니다. 처음부터 class를 배우기 때문입니다.
c는 모든 언어의 기반이기 때문에 나중에 java를 하실 때도 편하게 하실 수 있을 겁니다.
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
[C++] 백준 4150번 피보나치 수 (0) | 2024.05.15 |
---|---|
[C++] 캡슐화, 접근지정자, 접근 함수 (0) | 2024.05.14 |
객체지향프로그래밍 4과 그룹액티비티 1번 2번\ (0) | 2024.04.21 |
객체지향프로그래밍 과제3 총정리 (0) | 2024.04.21 |
객체지향프로그래밍 3과 그룹액티비티 총정리 (0) | 2024.04.21 |