C++ study(4)

김혜원·2023년 1월 23일
0

c++study

목록 보기
4/11

class source code 파일 분할

class가 많아지거나 멤버가 많아지면 소스 코드를 여러 파일로 분할할 필요가 생긴다.

class에 대해 분할!

  • header 파일 h확장자 파일과 cpp 확장자 파일로 하나의 class를 분할!
    h 파일(interface file): class 선언
    cpp 파일(implementation file): 멤버 함수 정의
  • header file
class Pairs{
private:
int m, n;
public:
void setM(int);
void setN(int);
int getM();
int getN();
int sum();
void print();
};

class 선언

  • implementation file
#include <iostream>
#include "Pairs.h"
using namespace std;

void Pairs::setM(int m1)
{
	m = m1;
}

void Pairs::setN(int n1)
{
	n = n1;
}

int Pairs::getM()
{
	return m;
}

int Pairs::getN()
{
	return n;
}

int Pairs::sum()
{
	return m + n;
}

void Pairs::print()
{
	cout << "m: " << m << ", n: " << n << endl;
}

header file 이름, 확장자 묶어서 include!

  • main file
#include <iostream>
#include "Pairs.h"
using namespace std;

int main()
{

	Pairs A, B;
	A.setM(3);
	A.setN(10);
	B.setM(-7);
	B.setN(12);

	cout << "A's sum: " << A.sum() << endl;
	cout << "B's sum: " << B.sum() << endl;
	A.print();
	B.print();

	return 0;
}

pairs.h header file을 선언해 준다!

class안의 class

  • coord.h
class coord
{
private:
	int x, y;

public:
	void set(int, int);
	void setX(int);
	void setY(int);
	int getX();
	int getY();
};
  • coord.cpp
#include <iostream>
#include "coord.h"
using namespace std;

void coord::set(int x1, int y1)
{
	x = x1;
	y = y1;
}

void coord::setX(int x1)
{
	x = x1;
}

void coord::setY(int y1)
{
	y = y1;
}
int coord::getX()
{
	return x;
}

int coord::getY()
{
	return y;
}
  • pairs.h
#include "coord.h"

class pairs
{
private:
	coord A, B;

public:
	void setA(int, int);
	void setB(int, int);
	void print();
};
  • pairs.cpp
#include <iostream>
#include "pairs.h"
using namespace std;

void pairs::setA(int x1, int y1)
{
	A.setX(x1);
	A.setY(y1);
}
void pairs::setB(int x1, int y1)
{
	B.setX(x1);
	B.setY(y1);
}
void pairs::print()
{
	cout << "A:(" << A.getX() << "," << A.getY() << ")" << endl;
	cout << "B:(" << B.getX() << "," << B.getY() << ")" << endl;
}
  • main.cpp
#include <iostream>
#include "pairs.h"
using namespace std;

int main()
{

	coord P;
	P.set(-1, -2);
	cout << "P:(" << P.getX() << "," << P.getY() << ")" << endl;

	pairs two;
	two.setA(5, 3);
	two.setB(0, 10);
	two.print();

	return 0;
}
  • 만약 중복되는 파일이 사용되어 main에서 coord.h가 두 번 읽혔을 때!
    compile하면 coord라는 class가 재정의 되었다는 error message가 나온다..
    한번만 읽히게 하려면??

<coord.h>

#ifndef COORD_H
#define COORD_H

class coord{
...
};

#endif

이런식으로 coord.h 파일 위아래에 ifndef, define, endif를 심어준다.
#ifndef는 해당 매크로가 아직 정의되지 않았어야 #endif까지의 내용을 실행한다.첫번째로 실행되었을 때 #define으로 "COORD_H"라는 매크로가 만들어졌으므로 #ifndef부터 #endif까지는 최초 한 번만 실행된다!

  • M1 mac에서 arm64 충돌 일어나는 문제 해결...
    linker문제로 인해 빌드가 제대로 되지 않아 error가 발생했다;;
    g++ 디버거에서 build!
    tasks_json파일에서
    "-g", "${file}을 아래와 같이 수정 후 다시 build!

0개의 댓글