목록

'C++' 15건

  • 바람직한 C++ 프로그램 작성법
    프로그래밍 언어/C++ · 댓글
    C++ 프로그램은 여러 클래스들의 전역 함수들로 구성됩니다. 이들을 하나의 C++ 소스 파일로 작성할 수도 있고 여러 소스 파일로 나눌 수도 있습니다. 헤더 파일과 cpp 파일 분리C++ 프로그램의 소스 코드는 다음과 같은 원칙으로 분리하여 작성하는 것이 바람직합니다.클래스마다 선언부는 헤더 파일에, 구현부는 cpp 파일에 분리하여 작성합니다.main() 등 함수나 전역 변수는 한 개 이상의 cpp 파일에 나누어 작성합니다.클래스마다 클래스의 선언부와 구현부를 헤더 파일과 cpp 소스 파일로 분리하면 전체 프로그램을 관리하기 쉽고 클래스를 재사용하기 쉽습니다. 클래스를 활용하는 코드들은 클래스에 대한 선언이 필요하므로, 클래스의 선언부가 들어 있는 헤더 파일만 include 하여 사용하면 됩니다. 만일 ..
  • C++ 구조체
    프로그래밍 언어/C++ · 댓글
    C++ 구조체 선언C++에서는 C 언어와의 호환성을 위해 구조체(struct)를 지원합니다. C++ 구조체는 표준 C 구조체에 기능을 확장하여 클래스와 동일한 구조와 기능을 가집니다. C++ 구조체는 struct 키워드로 선언하며, 멤버 변수와 멤버 함수를 가지고, 접근 지정도 해야 합니다.struct structName { // 디폴트 접근 지정은 public, public 속성은 멤버 변수나 멤버 함수 선언private: // private 속성의 멤버 변수나 멤버 함수 선언public: // public 속성의 맴버 변수나 멤버 함수 선언protected: // protected 속성의 멤버 변수나 멤버 함수 선언}; C++ 구조체의 객체 생성C++ 구조체의 객체 생성은..
  • 접근 지정
    프로그래밍 언어/C++ · 댓글
    접근 지정자객체 지향 언어에서는 객체를 캡슐화하고, 외부에서 접근 가능한 공개 멤버와 외부에서 접근을 허용하지 않는 비공개 멤버를 구분합니다. C++에서는 다음 3가지 멤버 접근 지정자(access specifier)가 있습니다.private(비공개)public(공개)protected(보호)멤버에 대한 접근 지정은 클래스 선언부에서 접근 지정자 다음에 콜론(;)을 찍고 멤버들을 선언하는 방식으로 이루어집니다.class Sample {private: // private 멤버 선언. 클래스 내의 멤버 함수만 접근 가능public: // public 멤버 선언. 클래스 내외의 모든 함수에게 접근 허용protected: // protected 멤버 선언. 클래스 내의 멤버가 상속받은 파생 클래스에만 접근 허용}..
  • 소멸자 실행
    프로그래밍 언어/C++ · 댓글
    Circle 클래스에 소멸자를 추가하고, 소멸자가 실행되면 화면에 메시지를 출력하도록 작성하였습니다.int main() { Circle donut; Circle pizza(30); return 0;} main()의 스택에 donut, pizza의 순서로 객체가 생성되며, return 0; 문이 실행되면 반대순으로 pizza, donut 객체가 소멸됩니다. pizza 객체의 ~Circle() 소멸자와 donut 객체의 ~Circle() 소멸자가 각각 순서대로 실행됩니다. Circle 클래스에 소멸자 작성 및 실행#include using namespace std;class Circle {public: int radius; Circle(); Circle(int r); ~Circle(); // 소멸자 선언 d..
  • 소멸자란?
    프로그래밍 언어/C++ · 댓글
    태어난 모든 생명체가 언젠가는 흙으로 돌아가는 것처럼, C++ 객체 역시 언젠가는 소멸됩니다.객체가 소멸되면 객체 메모리는 시스템으로 반환됩니다. 또한 객체 생성 시 생성자 함수가 실행되는 것처럼 객체 소멸 시 소멸자 함수가 실행됩니다. 소멸자(destructor)는 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수입니다. 소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함입니다.객체가 소멸할 때, 동적으로 할당받은 메모리를 운영체제에게 돌려주거나, 열어 놓은 파일을 저장하고 닫거나, 연결된 네트워크를 해제하는 등 객체가 사라지기 전에 필요한 조치를 하도록 하기 위함입니다. 소멸자의 이름은 클래스 이름 앞에 ~를 붙입니다.Circle 클래스의 소멸자 이름은 ~Circle()이며, 소..
  • 생성자는 꼭 있어야 하는가?
    프로그래밍 언어/C++ · 댓글
    클래스에 여러 개의 생성자가 있다 해도, C++ 컴파일러는 생성자 중 반드시 하나를 호출하도록 컴파일합니다. 생성자 없는 클래스란 있을 수가 없습니다. 생성자가 없는 클래스에 대해서는 컴파일러가 기본 생성자(default constructor)를 만들어 삽입하고, 자신이 삽입한 기본 생성자를 호출하도록 컴파일합니다. 기본 생성자기본 생성자란 클래스에 선언된 어떤 생성자도 없을 때 컴파일러가 자동으로 생성해주는 생성자로서 디폴트 생성자(default constructor)라고도 부르며, 다음과 같이 매개 변수 없는 생성자입니다.class Circle { Circle(); // 기본 생성자}; 기본 생성자가 자동으로 생성되는 경우생성자가 하나도 없는 클래스의 경우 컴파일러는 보이지 않게 기본 생성자를 삽입합..
  • 생성자와 멤버 변수의 초기화
    프로그래밍 언어/C++ · 댓글
    클래스의 멤버 변수들은 자동으로 초기화되지 않기 때문에 생성자에서 초기화합니다.멤버 변수 초기화에 대해 알아봅시다. 생성자 코드에서 멤버 변수 초기화다음은 2개의 생성자가 각각 멤버 변수를 초기화하는 Point 클래스의 사례입니다.class Point { int x, y;public: Point(); Point(int a, int b);};Point::Point() { x = 0; y = 0; }Point::Point(int a, int b) { x = a; x = b; } 생성자 서두에 초기값으로 초기화이 2개의 생성자는 다음과 같이 생성자의 코드의 구현부에 멤버 변수와 초깃값을 쌍으로 지정하고 이들을 콤마(,)로 나열하여 작성할 수 있습니다.Point::Point() { x = 0; y = 0; } ..
  • 위임 생성자(delegating constructor), 생성자가 다른 생성자 호출
    프로그래밍 언어/C++ · 댓글
    한 클래스의 생성자들에는 대개 객체를 초기화하는 비슷한 코드가 중복됩니다. 아래 코드의 경우에도 다음과 같이 2개의 생성자에 코드가 중복되어 있습니다.Circle::Circle() { radius = 1; cout C+11부터는 중복된 초기화 코드를 하나의 생성자로 몰고, 다른 생성자에서 이 생성자를 호출할 수 있게 한다. 이 기능을 아용하면 앞의 코드는 다음과 같이 간소화됩니다.Circle::Circle() : Circle(1) { } // Circle(int r)의 생성자 호출Circle::Circle(int r) { radius = r; cout Circle() 생성자가 호출되면 Circle() 생성자는 자신의 코드를 실행하기 전에 Circle(int r) 생성자를 호출하여, r에 1을 넘겨주어..
  • 생성자란?
    프로그래밍 언어/C++ · 댓글 1
    클래스는 객체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통하여 객체를 초기화합니다. 한 클래스에 여러 개의 생성자를 들 수 있으나, 이 중 하나만 실행됩니다. 생성자의 특징을 하나씩 정리해봅시다. 생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함입니다.멤버 변수의 값을 특정 값을 설정하거나, 메모리를 동적 할당 받거나, 파일을 읽거나, 네트워크를 연결하는 등 객체를 사용하기 전에 필요한 조치를 할 수 있도록 하기 위함입니다. 생성자 함수는 오직 한 번만 실행됩니다.생성자 함수는 각 객체마다 객체가 생성되는 시점에 오직 한 번만 자동으로 실행됩니다. 생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야 합니다.생성자 함수의 이름은 반드시 클래스 이름과 ..
  • 객체 생성과 객체 활용
    프로그래밍 언어/C++ · 댓글
    객체 생성과 활용 예제우선 객체를 생성하고 활용하는 예제를 만들어봅시다. 다음 예제는 Circle 클래스의 객체를 생성하고 활용하는 사례로서, main() 함수는 Circle 클래스의 객체 donut과 pizza를 생성하고 활용합니다. 예제 3-1 Circle 클래스의 객체 생성 및 활용#include using namespace std;class Circle {public: int radius; double getArea();};double Circle::getArea() { return 3.14 * radius * radius;}int main() { Circle donut; donut.radius = 1; // donut 객체의 반지름을 1로 설정 double area = donut.getArea(..
  • C++ 클래스 만들기
    프로그래밍 언어/C++ · 댓글
    클래스 만들기C++에서는 class 키워드를 이용하여 클래스를 선언합니다. C++ 클래스는 C언어의 구조(struct)와 같이 개발자가 정의하는 새로운 데이터 타입입니다. 클래스는 일반적으로 클래스 선언부(class declaration)과 클래스 구현부(class implementation)로 나누어 작성됩니다. 클래스 선언부는 class 키워드로 클래스의 모양을 선언하고, 클래스 구현부는 클래스의 멤버 함수들을 구현합니다. 클래스 선언부클래스는 class 키워드와 클래스 이름으로 선언합니다.class Circle { // Circle 이름의 클래스 선언 ...} // 반드시 세미클론(;)으로 종료 클래스 이름은 개발자가 원하는 대로 붙이면 됩니다. 클래스 선언은 클래스의 모양을 정의하는 것으로서,..
  • 키보드로 문자열 입력
    프로그래밍 언어/C++ · 댓글
    C++의 문자열C++응용프로그램에서 가장 많이 다루어지는 데이터 중 하나가 문자열입니다. 그러나 안타깝게도 문자열은 C++의 기본 데이터 타입이 아닙니다. C++에서는 다음 두 방법으로 문자열을 표현합니다. C-스트링 - C 언어에서 문자열을 표현하는 방법string 클래스 - 문자열을 객체로 다루는 방법, 권장하는 방법첫 번째 방법 : C-스트링C-스트링(C-string)은 널 문자('/0' 혹은 0)로 끝나는 char 배열을 말하며, C언어에서 사용하는 문자열 방식입니다. C++에서는 C언어와의 호환성 때문에 C-스트링을 그대로 사용합니다.char name1[0] = {'G', 'r', 'a', 'c', 'e', '\0'}; // name1은 문자열 "Grace"char name2[5] = {'G',..

바람직한 C++ 프로그램 작성법

C++ 프로그램은 여러 클래스들의 전역 함수들로 구성됩니다. 이들을 하나의 C++ 소스 파일로 작성할 수도 있고 여러 소스 파일로 나눌 수도 있습니다. 헤더 파일과 cpp 파일 분리C++ 프로그램의 소스 코드는 다음과 같은 원칙으로 분리하여 작성하는 것이 바람직합니다.클래스마다 선언부는 헤더 파일에, 구현부는 cpp 파일에 분리하여 작성합니다.main() 등 함수나 전역 변수는 한 개 이상의 cpp 파일에 나누어 작성합니다.클래스마다 클래스의 선언부와 구현부를 헤더 파일과 cpp 소스 파일로 분리하면 전체 프로그램을 관리하기 쉽고 클래스를 재사용하기 쉽습니다. 클래스를 활용하는 코드들은 클래스에 대한 선언이 필요하므로, 클래스의 선언부가 들어 있는 헤더 파일만 include 하여 사용하면 됩니다. 만일 ..

C++ 구조체

C++ 구조체 선언C++에서는 C 언어와의 호환성을 위해 구조체(struct)를 지원합니다. C++ 구조체는 표준 C 구조체에 기능을 확장하여 클래스와 동일한 구조와 기능을 가집니다. C++ 구조체는 struct 키워드로 선언하며, 멤버 변수와 멤버 함수를 가지고, 접근 지정도 해야 합니다.struct structName { // 디폴트 접근 지정은 public, public 속성은 멤버 변수나 멤버 함수 선언private: // private 속성의 멤버 변수나 멤버 함수 선언public: // public 속성의 맴버 변수나 멤버 함수 선언protected: // protected 속성의 멤버 변수나 멤버 함수 선언}; C++ 구조체의 객체 생성C++ 구조체의 객체 생성은..

접근 지정

접근 지정자객체 지향 언어에서는 객체를 캡슐화하고, 외부에서 접근 가능한 공개 멤버와 외부에서 접근을 허용하지 않는 비공개 멤버를 구분합니다. C++에서는 다음 3가지 멤버 접근 지정자(access specifier)가 있습니다.private(비공개)public(공개)protected(보호)멤버에 대한 접근 지정은 클래스 선언부에서 접근 지정자 다음에 콜론(;)을 찍고 멤버들을 선언하는 방식으로 이루어집니다.class Sample {private: // private 멤버 선언. 클래스 내의 멤버 함수만 접근 가능public: // public 멤버 선언. 클래스 내외의 모든 함수에게 접근 허용protected: // protected 멤버 선언. 클래스 내의 멤버가 상속받은 파생 클래스에만 접근 허용}..

소멸자 실행

Circle 클래스에 소멸자를 추가하고, 소멸자가 실행되면 화면에 메시지를 출력하도록 작성하였습니다.int main() { Circle donut; Circle pizza(30); return 0;} main()의 스택에 donut, pizza의 순서로 객체가 생성되며, return 0; 문이 실행되면 반대순으로 pizza, donut 객체가 소멸됩니다. pizza 객체의 ~Circle() 소멸자와 donut 객체의 ~Circle() 소멸자가 각각 순서대로 실행됩니다. Circle 클래스에 소멸자 작성 및 실행#include using namespace std;class Circle {public: int radius; Circle(); Circle(int r); ~Circle(); // 소멸자 선언 d..

소멸자란?

태어난 모든 생명체가 언젠가는 흙으로 돌아가는 것처럼, C++ 객체 역시 언젠가는 소멸됩니다.객체가 소멸되면 객체 메모리는 시스템으로 반환됩니다. 또한 객체 생성 시 생성자 함수가 실행되는 것처럼 객체 소멸 시 소멸자 함수가 실행됩니다. 소멸자(destructor)는 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수입니다. 소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함입니다.객체가 소멸할 때, 동적으로 할당받은 메모리를 운영체제에게 돌려주거나, 열어 놓은 파일을 저장하고 닫거나, 연결된 네트워크를 해제하는 등 객체가 사라지기 전에 필요한 조치를 하도록 하기 위함입니다. 소멸자의 이름은 클래스 이름 앞에 ~를 붙입니다.Circle 클래스의 소멸자 이름은 ~Circle()이며, 소..

생성자는 꼭 있어야 하는가?

클래스에 여러 개의 생성자가 있다 해도, C++ 컴파일러는 생성자 중 반드시 하나를 호출하도록 컴파일합니다. 생성자 없는 클래스란 있을 수가 없습니다. 생성자가 없는 클래스에 대해서는 컴파일러가 기본 생성자(default constructor)를 만들어 삽입하고, 자신이 삽입한 기본 생성자를 호출하도록 컴파일합니다. 기본 생성자기본 생성자란 클래스에 선언된 어떤 생성자도 없을 때 컴파일러가 자동으로 생성해주는 생성자로서 디폴트 생성자(default constructor)라고도 부르며, 다음과 같이 매개 변수 없는 생성자입니다.class Circle { Circle(); // 기본 생성자}; 기본 생성자가 자동으로 생성되는 경우생성자가 하나도 없는 클래스의 경우 컴파일러는 보이지 않게 기본 생성자를 삽입합..

생성자와 멤버 변수의 초기화

클래스의 멤버 변수들은 자동으로 초기화되지 않기 때문에 생성자에서 초기화합니다.멤버 변수 초기화에 대해 알아봅시다. 생성자 코드에서 멤버 변수 초기화다음은 2개의 생성자가 각각 멤버 변수를 초기화하는 Point 클래스의 사례입니다.class Point { int x, y;public: Point(); Point(int a, int b);};Point::Point() { x = 0; y = 0; }Point::Point(int a, int b) { x = a; x = b; } 생성자 서두에 초기값으로 초기화이 2개의 생성자는 다음과 같이 생성자의 코드의 구현부에 멤버 변수와 초깃값을 쌍으로 지정하고 이들을 콤마(,)로 나열하여 작성할 수 있습니다.Point::Point() { x = 0; y = 0; } ..

위임 생성자(delegating constructor), 생성자가 다른 생성자 호출

한 클래스의 생성자들에는 대개 객체를 초기화하는 비슷한 코드가 중복됩니다. 아래 코드의 경우에도 다음과 같이 2개의 생성자에 코드가 중복되어 있습니다.Circle::Circle() { radius = 1; cout C+11부터는 중복된 초기화 코드를 하나의 생성자로 몰고, 다른 생성자에서 이 생성자를 호출할 수 있게 한다. 이 기능을 아용하면 앞의 코드는 다음과 같이 간소화됩니다.Circle::Circle() : Circle(1) { } // Circle(int r)의 생성자 호출Circle::Circle(int r) { radius = r; cout Circle() 생성자가 호출되면 Circle() 생성자는 자신의 코드를 실행하기 전에 Circle(int r) 생성자를 호출하여, r에 1을 넘겨주어..

생성자란?

클래스는 객체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통하여 객체를 초기화합니다. 한 클래스에 여러 개의 생성자를 들 수 있으나, 이 중 하나만 실행됩니다. 생성자의 특징을 하나씩 정리해봅시다. 생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함입니다.멤버 변수의 값을 특정 값을 설정하거나, 메모리를 동적 할당 받거나, 파일을 읽거나, 네트워크를 연결하는 등 객체를 사용하기 전에 필요한 조치를 할 수 있도록 하기 위함입니다. 생성자 함수는 오직 한 번만 실행됩니다.생성자 함수는 각 객체마다 객체가 생성되는 시점에 오직 한 번만 자동으로 실행됩니다. 생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야 합니다.생성자 함수의 이름은 반드시 클래스 이름과 ..

객체 생성과 객체 활용

객체 생성과 활용 예제우선 객체를 생성하고 활용하는 예제를 만들어봅시다. 다음 예제는 Circle 클래스의 객체를 생성하고 활용하는 사례로서, main() 함수는 Circle 클래스의 객체 donut과 pizza를 생성하고 활용합니다. 예제 3-1 Circle 클래스의 객체 생성 및 활용#include using namespace std;class Circle {public: int radius; double getArea();};double Circle::getArea() { return 3.14 * radius * radius;}int main() { Circle donut; donut.radius = 1; // donut 객체의 반지름을 1로 설정 double area = donut.getArea(..

C++ 클래스 만들기

클래스 만들기C++에서는 class 키워드를 이용하여 클래스를 선언합니다. C++ 클래스는 C언어의 구조(struct)와 같이 개발자가 정의하는 새로운 데이터 타입입니다. 클래스는 일반적으로 클래스 선언부(class declaration)과 클래스 구현부(class implementation)로 나누어 작성됩니다. 클래스 선언부는 class 키워드로 클래스의 모양을 선언하고, 클래스 구현부는 클래스의 멤버 함수들을 구현합니다. 클래스 선언부클래스는 class 키워드와 클래스 이름으로 선언합니다.class Circle { // Circle 이름의 클래스 선언 ...} // 반드시 세미클론(;)으로 종료 클래스 이름은 개발자가 원하는 대로 붙이면 됩니다. 클래스 선언은 클래스의 모양을 정의하는 것으로서,..

키보드로 문자열 입력

C++의 문자열C++응용프로그램에서 가장 많이 다루어지는 데이터 중 하나가 문자열입니다. 그러나 안타깝게도 문자열은 C++의 기본 데이터 타입이 아닙니다. C++에서는 다음 두 방법으로 문자열을 표현합니다. C-스트링 - C 언어에서 문자열을 표현하는 방법string 클래스 - 문자열을 객체로 다루는 방법, 권장하는 방법첫 번째 방법 : C-스트링C-스트링(C-string)은 널 문자('/0' 혹은 0)로 끝나는 char 배열을 말하며, C언어에서 사용하는 문자열 방식입니다. C++에서는 C언어와의 호환성 때문에 C-스트링을 그대로 사용합니다.char name1[0] = {'G', 'r', 'a', 'c', 'e', '\0'}; // name1은 문자열 "Grace"char name2[5] = {'G',..