class가 많아지거나 멤버가 많아지면 소스 코드를 여러 파일로 분할할 필요가 생긴다.
class에 대해 분할!
- header 파일 h확장자 파일과 cpp 확장자 파일로 하나의 class를 분할!
h 파일(interface file): class 선언
cpp 파일(implementation file): 멤버 함수 정의
class Pairs{
private:
int m, n;
public:
void setM(int);
void setN(int);
int getM();
int getN();
int sum();
void print();
};
class 선언
#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!
#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 coord
{
private:
int x, y;
public:
void set(int, int);
void setX(int);
void setY(int);
int getX();
int getY();
};
#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;
}
#include "coord.h"
class pairs
{
private:
coord A, B;
public:
void setA(int, int);
void setB(int, int);
void print();
};
#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;
}
#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!