C++ 클래스 - 선언과 정의의 분리&전방 선언

진경천·2023년 9월 19일
0

C++

목록 보기
39/90

One Definition Rule(ODR)

  • 인라인이 아닌 함수나 멤버함수, 전역변수, 정적데이터멤버는 한 프로그램내에서 단 한 번만 정의 되어야한다.
  • 클래스형(구조체, 유니온포함)과 인라인 함수는 적어도 한 번역 단위(translation unit)마다 한 번씩 정의되어야 하며 모든 정의는 동일해야 한다.

함수의 선언과 정의

함수는 선언부와 정의부로 나눌수 있는데, 이는 클래스도 마찬가지이다.

  • main 함수
#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

소스 코드 파일을 컴파일할 때 컴파일러에 헤더 파일이 한번만 포함되도록 지정한다는 의미이다.
비표준이므로 사용 불가한 컴파일러가 있을 수도 있다.

  • #indef - #endif

    #pragma once와 같은 의미로 쓰인다
    #ifndef
    실행문
    #endif
    의 형태로 쓰이며 if not define 말 그대로 실행문이 정의 되지 않았다면 정의를 하고 정의가 되었다면 정의 하지 않는다는 의미

profile
어중이떠중이

0개의 댓글