본문 바로가기
C++

[C++] 선언(Declaration) VS 정의(Definition)/헤더파일과 소스파일 분리 + 예시코드

by 유노brain 2023. 10. 26.
반응형

클래스 선언(Class declaration)

멤버 필드 선언은 이전과 같이 선언해야 합니다.

 

멤버 함수 선언의 경우

함수 선언에 있어 본문에 선언할 함수가 없어야 합니다.

함수 선언의 경우 다음의 구조를 따릅니다.

ReturnType FunctionName(Parameters)

 

예시코드
#include <iostream>
#include <string>

class Animal{
    Animal(std::string name); //멤버 함수 선언
    void set_name(std::string name); //멤버 함수 선언
    std::string name(); //멤버 함수 선언

    private:
    std::string name_;
};

 

클래스 정의(Class definition)

선언이 진행된 뒤 선언과는 별도로 클래스에서는 클래스 멤버함수를 정의해줘야 합니다.

함수 정의의 경우 다음 구조를 따릅니다.

ReturnType ClassNAme::FunctionName(Parameters) {BodyStmt;}

 

예시코드
#include <iostream>
#include <string>
#include "animal.h"

Animal::Animal(std::string name) : name_(name) {}  //멤버 함수 정의
void Animal::set_name(std::string name) { name_ = name; } //멤버 함수 정의
std::string Animal::name(){return name_;} //멤버 함수 정의

 

 

합치기

클래스 선언과 정의는 다른 파일에 저장합니다.

클래스 선언 → header file (.h)

클래스 정의 source file (.cc or .cpp)

 

animal.h (헤더파일)
#ifndef _ANIMAL_H_
#define _ANIMAL_H_

#include <iostream>
#include <string>

class Animal{
    Animal(std::string name); //멤버 함수 선언
    void set_name(std::string name); //멤버 함수 선언
    std::string name(); //멤버 함수 선언



    private:
    std::string name_;
};


#endif //ANIMAL_H_
animal.cc (소스파일)
#include <iostream>
#include <string>
#include "animal.h"

Animal::Animal(std::string name) : name_(name) {}  //멤버 함수 정의
void Animal::set_name(std::string name) { name_ = name; } //멤버 함수 정의
std::string Animal::name(){return name_;} //멤버 함수 정의
반응형

댓글