- 인라인이 아닌 함수나 멤버함수, 전역변수, 정적데이터멤버는 한 프로그램내에서 단 한 번만 정의 되어야한다.
- 클래스형(구조체, 유니온포함)과 인라인 함수는 적어도 한 번역 단위(translation unit)마다 한 번씩 정의되어야 하며 모든 정의는 동일해야 한다.
함수는 선언부와 정의부로 나눌수 있는데, 이는 클래스도 마찬가지이다.
#include <iostream>
#include "Person.h"
using namespace std;
int main() {
Person person(12, 132, "jam");
person.print();
foo();
}
#include "Person.h"
void foo() {
Person p(30, 140, "Jam2");
p.print();
}
Person::Person(float weight, float height, const std::string& name)
: _weight(weight), _height(height), _name(name) {
}
void Person::print() {
std::cout << _name << std::endl;
}
// 함수의 정의
#ifndef __PERSON_H__
#define __PERSON_H__
#include <iostream>
class Person {
private:
float _weight;
float _height;
const std::string _name;
public:
Person(float weight, float height, const std::string& name);
void print();
};
void foo();
// 함수의 선언
#endif
// if not define에 대한 블럭이 만들어짐
// pragma once와 같은 기능
jam
Jam2
헤더파일은 함수의 선언부이며 보통 정의는 소스파일에서 하게된다
함수를 포함 할때 시스템 헤더파일은 < > 유저 디파인 헤더파일은 " "로 포함하게된다
ex) #include < stdio.h > #include "Person.h"
소스 코드 파일을 컴파일할 때 컴파일러에 헤더 파일이 한번만 포함되도록 지정한다는 의미이다.
비표준이므로 사용 불가한 컴파일러가 있을 수도 있다.
#pragma once와 같은 의미로 쓰인다
#ifndef
실행문
#endif
의 형태로 쓰이며 if not define 말 그대로 실행문이 정의 되지 않았다면 정의를 하고 정의가 되었다면 정의 하지 않는다는 의미