포인터, 포인터 배열, 배열 포인터, 레퍼런스, 클래스, 멤버함수(내부, 외부), 멤버변수,
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;
}

'코딩 공부 > C++기초' 카테고리의 다른 글

C++공부_06  (0) 2025.12.17
C++공부_05  (0) 2025.12.16
C++공부_04  (1) 2025.12.11
C++공부_02  (0) 2025.12.08
[C++ 기초] 전처리기, 입출력 흐름, 그리고 변수의 이해  (1) 2025.12.05