포인터, 포인터 배열, 배열 포인터, 레퍼런스, 클래스, 멤버함수(내부, 외부), 멤버변수,
public/private, getter/setter, 헤더/cpp 파일
포인터
#include <iostream>
using namespace std;
int main() {
int x = 3;
char y = 'A';
int* ptr1 = &x; // 정수형 변수 x의 주소 저장
char* ptr2 = &y; // 문자형 변수 y의 주소 저장
cout << "ptr1이 가리키는 값: " << *ptr1 << endl;
cout << "ptr2가 가리키는 값: " << *ptr2 << endl;
cout << "ptr1의 주소: " << (void*)ptr1 << endl;
cout << "ptr1의 주소: " << &ptr1 << endl;
cout << "ptr2의 주소: " << (void*)&ptr2 << endl;
return 0;
}
/*
출력 결과:
ptr1이 가리키는 값: 3
ptr2가 가리키는 값: A
*/
포인터 배열과 배열 포인터의 차이점
#include <iostream>
using namespace std;
// 포인터 배열과 배열 포인터의 차이점 확인
int main() {
int x = 1, y = 2, z = 3;
int* ptrArr[3] = { &x, &y, &z }; // 포인터 배열 (각 원소가 int* 타입)
int arr[3] = { 10, 20, 30 };
int (*ptr)[3] = &arr; // 배열 포인터 (배열 전체를 가리킴)
// 포인터 배열을 통한 접근
cout << "*ptrArr[0]: " << *ptrArr[0] << endl; // 1
cout << "*ptrArr[1]: " << *ptrArr[1] << endl; // 2
cout << "*ptrArr[2]: " << *ptrArr[2] << endl; // 3
// 배열 포인터를 통한 접근
cout << "(*ptr)[0]: " << (*ptr)[0] << endl; // 10
cout << "(*ptr)[1]: " << (*ptr)[1] << endl; // 20
cout << "(*ptr)[2]: " << (*ptr)[2] << endl; // 30
cout << "*ptr[0]: " << *ptr[0] << endl; // 10
cout << "&arr: " << &arr << endl; // 10
cout << "&arr: " << *&arr[1] << endl; // 10
//cout << "*ptr[1]: " << *ptr[1] << endl; // 20x
//cout << "*ptr[2]: " << *ptr[2] << endl; // 30x
return 0;
}
/*
출력 결과:
*ptrArr[0]: 1
*ptrArr[1]: 2
*ptrArr[2]: 3
(*ptr)[0]: 10
(*ptr)[1]: 20
(*ptr)[2]: 30
*/
레퍼런스
#include <iostream>
using namespace std;
// 잘못된 레퍼런스 선언 예제
int main() {
int& ref; // 레퍼런스는 선언과 동시에 초기화해야 함
return 0;
}
/*
컴파일 오류 메시지 예시:
error: 'ref' declared as reference but not initialized
*/
클래스 정의
class Student
{
//동작 정의(이를 멤버함수라고 합니다)
double getAvg();
int getMaxNum();
//데이터 정의(이를 멤버변수라고 합니다.)
int kor[3];
int eng[3];
int math[3];
};
멤버함수 구현(클래스 내부)
#include <iostream>
#include <algorithm> //max 함수 사용
#include <string>
using namespace std;
class Student
{
//동작 정의(이를 멤버함수라고 합니다)
double getAvg()
{
return (kor + eng + math ) / 3.0;
}
int getMax()
{
return max(max(kor, eng), math);
}
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
멤버함수 구현(클래스 외부)
#include <iostream>
#include <algorithm> //max 함수 사용
#include <string>
using namespace std;
class Student
{
//동작 정의(이를 멤버함수라고 합니다)
double getAvg();
int getMaxNum();
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
double Student::getAvg()
{
return (kor + eng + math) / 3.0;
}
int Student::getMaxNum()
{
return max(max(kor, eng), math);
// 다른 방법 return max({ kor, eng, math });
}
public와 private
class Student
{
public:
//동작 정의(이를 멤버함수라고 합니다)
double getAvg();
int getMaxScore();
private:
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
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;
}
헤더파일
#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();
private:
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
#endif
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;
}