getter 와 setter에 대한 내용입니다.
#include <iostream>
#include <algorithm> //max 함수 사용
#include <string>
using namespace std;
class Student
{
public:
//동작 정의(이를 멤버함수라고 합니다)
double getAvg();
int getMaxScore();
void setMathScore(int math)
{
this->math = math;
}
void setEngScore(int eng)
{
this->eng = eng;
}
void setKorScore(int kor)
{
this->kor = kor;
}
int getMathScore() { return math; }
int getEngScore() { return eng; }
int getKorScore() { return kor; }
private:
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
double Student::getAvg()
{
return (kor + eng + math) / 3.0;
}
int Student::getMaxScore()
{
return max(max(kor, eng), math);
}
int main()
{
Student s;
//점수 입력(변수로 해도 되지만 간단히
s.setEngScore(32);
s.setKorScore(52);
s.setMathScore(74);
//평균 최대점수 출력
cout << s.getAvg() << endl;
cout << s.getMaxScore() << endl;
return 0;
}
기본생성자?
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 기본 생성자
Person() {
name = "Unknown";
age = 0;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p; // 기본 생성자 호출
p.display();
return 0;
}
매개변수가 있는 생성자?
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 매개변수가 있는 생성자
Person(string n, int a) {
name = n;
age = a;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p("Alice", 25); // 매개변수가 있는 생성자 호출
p.display();
return 0;
}
매개 변수를 설정하기 않아도 기본 매개변수 존재하는 생성자?
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 기본 매개변수가 있는 생성자
Person(string n = "DefaultName", int a = 18) {
name = n;
age = a;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p1; // 기본값 사용
Person p2("Bob", 30); // 값을 지정
p1.display();
p2.display();
return 0;
}
하지만 잘못된 매개변수를 전달하면 에러발생
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 매개변수가 있는 생성자
Person(string n, int a) {
name = n;
age = a;
}
};
int main() {
Person p("Tom"); // 에러: 생성자에 필요한 매개변수 부족
// 컴파일 에러: "no matching function for call to 'Person::Person(const char [4])'"
// 매개변수 두 개를 요구하는 생성자에 하나의 매개변수만 전달하여 매칭되지 않음
p.display();
return 0;
}
선언만 하고 정의를 하지 않았을경우
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 생성자를 선언만 하고 정의하지 않음
Person(string n, int a);
};
int main() {
Person p("Alice", 25); // 선언된 생성자의 정의가 없으므로 컴파일 에러 발생
cout << "Name: " << p.name << ", Age: " << p.age << endl;
return 0;
}
헤더파일에 class 정의하기
헤더파일에 새항목을 추가하여 student_h라는 이름으로 생성해보겠습니다 그 후 아래와 같은 내용추가
#ifndef STUDENT_H_
#define STUDENT_H_
class Student
{
public:
//값이 주어지지 않을경우 기본값을 할당하는 생성자
Student(int math = 32, int eng = 17, int kor = 52)
{
this->math = math;
this->eng = eng;
this->kor = kor;
}
double getAvg();
int getMaxScore();
//동작 정의(이를 멤버함수라고 합니다)
void setMathScore(int math)
{
this->math = math;
}
void setEngScore(int eng)
{
this->eng = eng;
}
void setKorScore(int math)
{
this->math = math;
}
int getMathScore() { return math; }
int getEngScore() { return eng; }
int getKorScore() { return kor; }
private:
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
#endif
class를 헤더 파일에 정의할 때 가장 중요한 것은 class가 중복 선언되지 않게 하는 것 입니다. 내가 만든 헤더 파일을 여러 파일에서 사용 하다 보면 class가 여러번 정의 될 수 있습니다. 이를 방지 하기 위해서 #ifndef 구문을 활용 합니다. 코드를 보고 의미를 한번 알아보겠습니다.
#ifndef STUDENT_H_ 의 의미는 STUDENT_H_가 정의 되어 있지 않은 경우에만 아래 코드를 수행하라는 의미 입니다.
2️⃣
#define STUDENT_H_는 STUDENT_H_를 정의합니다. #ifndef일 때만 #define이 수행되므로 단 한번만 수행 될 수 있습니다.
3️⃣
#ifndef가 끝났다는 것을 알려주기 위해 #endif를 작성 합니다.
4️⃣
최종적으로 Student Class는 중복 정의 될수 없게 됩니다
Student class를 헤더파일에 정의(Student.cpp)
#include "Student.h"
#include <algorithm> // max 함수
using namespace std;
double Student::getAvg()
{
return (kor + eng + math) / 3.0;
}
int Student::getMaxScore()
{
return max(max(kor, eng), math);
}
이렇게 하면 메인 함수에서 깔끔하게 사용이 가능합니다.
메인함수
#include <iostream>
#include "Student.h"
using namespace std;
int main()
{
Student s;
Student s2(1);
Student s3(1,2);
Student s4(32,52,74);
//평균 최대점수 출력
cout << s.getAvg() << endl;
cout << s.getMaxScore() << endl;
return 0;
}
'언리얼(Unreal) > 엔진' 카테고리의 다른 글
24.12.24 언리얼 cpp 객체지향에 대하여 (1) | 2024.12.24 |
---|---|
24.12.20 언리얼(콜리전) (0) | 2024.12.20 |
24.12.19 언리얼(레벨 디자인 및 캐릭터 무브먼트 제작) (1) | 2024.12.19 |
24.12.18 언리얼 (블루프린트 실습) (1) | 2024.12.18 |
24.12.17 언리얼(에디터 화면과 머티리얼) (0) | 2024.12.17 |