반응형
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Date
{
private:
int m_month;
int m_day;
int m_year;
};
int main()
{
Date today;
today.m_month = 8;
today.m_day = 4;
today.m_year = 2025;
return 0;
}
이럴 경우 private 코드이기 때문에 today.m_month 이런 식으로 사용이 불가능하고 에러가 발생합니다. public으로 바꿀 경우 객체지향 프로그래밍에서 효율이 좋은 게 아닌데요. 그러면 어떻게 access function을 해주어야 할까요?
나를 통해라 라는 함수를 만들어주면 됩니다. public으로 함수를 만들어주면 그 public 함수는 private에 접근할 수 있기 때문에 문지기 역할을 한다고 보시면 됩니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Date
{
int m_month;
int m_day;
int m_year;
public:
void setDate(const int& month_input, const int& day_input, const int& year_input)
{
m_month = month_input;
m_day = day_input;
m_year = year_input;
}
};
int main()
{
Date today;
today.setDate(8, 4, 2025);
return 0;
}
이런 식으로 setDate는 private 각각에 접근할 수 있으면서 int main에서 사용이 가능하기에 이것이 access function이라고 보시면 됩니다. setDate하면 통째로 3개를 입력받아서 멤버를 바꿔줄 수 있습니다. 이것 말고도 setMonth, setDay, setYear도 반들 수 있습니다.
이렇게 객체지향프로그래밍에선 set 생성하는 것과 return 해주는 get 함수를 생성해줍니다.
copy.copyfrom(today);
이런 copy를 해주는 함수를 만들어주고자 합니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Date
{
int m_month;
int m_day;
int m_year;
public:
void setDate(const int& month_input, const int& day_input, const int& year_input)
{
m_month = month_input;
m_day = day_input;
m_year = year_input;
}
void setMonth(const int& month_input)
{
m_month = month_input;
}
const int &getDay()
{
return m_day;
}
void copyFrom(const Date& original)
{
m_month = original.m_month;
m_day = original.m_day;
m_year = original.m_year;
}
};
int main()
{
Date today;
today.setDate(8, 4, 2025);
today.setMonth(10);
cout << today.getDay() << endl;
Date copy;
copy.copyFrom(today);
return 0;
}
이런 경우 막상 될 것 같진 않은데요.
같은 클래스의 다른 instance에 들어있는 것도 가능합니다. 같은 클래스 안에 들어있다면 private에도 접근이 가능하기에 original이라는 변수는 Date의 instance이면서 original.m_month; 이런 식으로 접근이 가능한 것입니다.
반응형
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
[8.3] 생성자 c++ (0) | 2024.05.15 |
---|---|
[C++] 백준 4150번 피보나치 수 (0) | 2024.05.15 |
[따배시 c++ 8.1] 객체지향 프로그래밍과 클래스 (0) | 2024.05.14 |
객체지향프로그래밍 4과 그룹액티비티 1번 2번\ (0) | 2024.04.21 |
객체지향프로그래밍 과제3 총정리 (0) | 2024.04.21 |