반응형

C++ 177

[C++] 집합(Aggregation)관계와 구성(Composition) 관계

4. 2 집합(Aggregation) 과 구성(Composition) 학생과 책의 관계처럼 "철수라는 학생은 책을 가지고 있다."라는 논리적 관계를 집합이라 합니다. 집합 관계에서는 소유 개체와 피 소유 개체의 생성 시기와 소멸 시기가 같지 않아도 됩니다. 이와 같은 관계에서 대부분 소유 개체가 피 소유 개체의 메서드를 호출하여 명령하는 직접 연관 관계가 존재하는 경우와 단순히 피 소유 개체들을 보관하는 집합체일 수 있습니다. 집합체일 경우에는 집합 관계만 표시하겠지만 직접 연관 관계가 존재하는 경우에는 집합 관계와 직접 연관 관계도 같이 표현하는 것이 좀 더 정확한 표현입니다. [그림 4.2]는 집합 관계만 있는 경우이고 [그림 4.3]은 집합 관계에 직접 연관 관계도 있는 경우입니다. [그림 4.2]..

[C++] 2.2.1 멤버 메서드

2.2.1 멤버 메서드 이번에는 멤버 메서드에 대해서 알아보기로 합시다. C++언어에서 사용자가 형식을 정의할 경우 멤버 필드와 멤버 메서드를 캡슐화할 수 있다고 하였습니다. 멤버 메서드를 캡슐화를 할 경우 메서드에서 수행할 코드를 정의하는 것은 클래스 정의문 내에서 할 수도 있고 클래스 정의문 외부에서도 할 수 있습니다. 클래스 외부에 메서드에서 수행할 코드를 정의한 예 class Stu { public: void Study(); }; void Stu::Study() { cout

[C++] 2. 1 캡슐화란?

2. 1 캡슐화란? 이번 장부터 C++의 클래스에 관한 얘기가 시작됩니다. 클래스에 대해 문법을 효과적으로 이해하고 사용하기 위해서는 OOP(Object Oriented Programming, 개체 지향 프로그래밍)의 특징을 잘 인지하여야 합니다. 개체 지향 프로그래밍(많은 곳에서 개체를 객체라 부르고 있습니다. 여러분이 MSDN을 통해 학습을 하다 보면 객체로 번역하지 않고 개체로 번역된 것을 보게 됩니다. 이 책에서는 MSDN에 번역된 것처럼 개체라고 부르겠습니다.) OOP의 특징을 얘기할 때 많은 이들이 OOP의 세 가지 기둥을 얘기합니다. OOP의 세 가지 기둥에는 캡슐화와 상속, 다형성이 있습니다. 이 중에 캡슐화는 여러 개의 멤버를 하나의 형식으로 묶어서 정의하는 것을 말합니다. 예를 들어, ..

[C++] namespace

- namespace C++언어는 1988년에 만들어진 이후에 계속해서 새로운 문법이 추가되고 있습니다. 이렇게 추가된 문법 중의 하나가 namespace인데 이를 이용하면 같은 이름의 형식이나 개체 등이 정의된 여러 라이브러리 중에 원하는 부분을 선별적으로 사용할 수 있습니다. 가령, ALib와 BLib에 Stack과 Queue라는 사용자 형식을 제공하고 있는데 ALib에 있는 Stack과 Queue를 사용한다고 가정해 봅시다. 만약 namespace로 구분되어 있지 않다면 ALib를 추가하고 BLib를 추가를 하면 같은 이름이 사용자 형식이 정의되어 있어 컴파일 오류가 발생합니다. 이러한 문제점을 위해 C++에서는 namespace문법이 추가되었습니다. 이에 대해 살펴보기 위해 다음의 예를 들어보기로..

[C++] 매개 변수명이 없는 입력 매개 변수

- 매개 변수명이 없는 입력 매개 변수 C++에서 함수 중복이 가능하다는 것은 위에서 이미 언급한 바가 있습니다. 그런데 경우에 따라서 메서드 명을 같게 부여하고 싶은데 입력 인자가 같다면 어떻게 해야 할까요? C++언어에서는 이 같은 경우에 두 개의 함수를 구분하기 위해 매개 변수명이 없는 입력 매개 변수를 사용할 수 있습니다. 물론, 호출하는 곳에서는 피 호출함수에 값이 전달되어 사용되지는 않지만, 호출 시 이에 대한 값도 반드시 넣어야 합니다.

[C++] 함수 중복 정의(function overloading)

- 함수 중복 정의(function overloading) C언어에서는 같은 이름을 갖는 함수를 정의할 수가 없었습니다. C++에서는 특정 조건을 만족하게 하는 경우 같은 이름을 갖는 함수를 중복해서 정의할 수 있습니다. C++에서는 컴파일 과정에서 사용자가 정의한 코드를 전개하는 과정에서 사용자가 정의한 함수명을 매개 변수 리스트에 따라 유일한 이름의 함수명으로 결정하는 함수 부호화(코드화) 과정이 진행됩니다. 그리고 함수를 호출하는 부분은 가장 적절한 매개 변수를 갖는 함수가 호출될 수 있게 연결(함수 이름 Mangling)해 줍니다. 이러한 이유로 C++에서는 사용자가 정의한 함수를 호출할 때 사용하는 이름을 함수명이라고 부르는 것 보다 메서드 명이라 부르는 게 좀 더 정확한 표현입니다. 즉, 정의..

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (열거형)

1. 2 클래스를 제외한 C언어와 다른 문법 사항 C++언어는 C언어와 클래스를 제외한 문법 사항이 상당히 유사합니다. 여기에서는 클래스를 제외한 문법 사항 중에 C언어와 다른 부분들을 소개하려고 합니다. C++언어에서는 사용자의 논리적 오류에 대해 C언어보다 엄격하게 검사하여 신뢰성을 높였습니다. 이는 개발 단계에서 잘못된 부분을 고칠 기회를 주므로 전체 개발 비용을 줄일 수 있게 됩니다. 그리고 신뢰성에 문제가 없는 범위에서 더욱 효과적으로 표현할 수 있게 다양한 편의성을 제공하고 있습니다. 여기에서는 신뢰성을 강화시키는 문법 사항과 편의성을 제공하는 문법 사항으로 나누어 설명하겠습니다. 참고: 이 책에서 사용자는 C++ 언어 사용자를 말하며 프로그램 사용자는 최종 사용자라고 명시하겠습니다. 1.2...

[C언어 무료 동영상 강의] 2. 컴퓨터 프로그램 ~ 3. 프로그래밍 언어 역사

2. 컴퓨터 프로그램 ~ 3. 프로그래밍 언어 역사 컴퓨터 프로그램 H/W와 S/W, 프로그래밍 언어, 개발 도구(편집기, 컴파일러, 링커, 디버거)프로그래밍 언어 역사천공카드, 최초의 컴퓨터, 어셈블리어 탄생, 고급 언어 탄생, B언어와 C언어, C++, Java, C# 탄생디딤돌 C언어 관련 게시글 2. 컴퓨터 프로그램 내용으로 바로가기3. 프로그래밍 언어 역사 내용으로 바로가기 앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요. 2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다.

10.3.1 그래프 구현 [디딤돌 자료구조와 알고리즘 with C++]

10.3.1 그래프 구현 그래프는 방향성 없는 그래프와 방향성 있는 그래프가 있습니다. 먼저 방향성 없는 그래프를 살펴보아요. 방향성 없는 그래프는 정점 A에서 정점 B로 이동할 수 있으면 언제나 정정 B에서 정정 B로 이동할 수 있음을 보장하는 그래프예요. 방향성 없는 그래프를 표현하는 방법 중에 간단한 그래프에는 인접 행렬을 많이 사용해요. 인접 행렬로 방향성 없는 그래프를 표현하면 좌상단에서 우하단으로 이어지는 대각선에 대칭 형태죠. 먼저 그래프 형식을 정의하기로 해요. 인접 행렬로 그래프를 표현할 때 그래프에는 정점 개수와 인접 행렬이 필요하겠죠. 이제 방향성 없는 그래프를 구현해 봅시다. 정점을 보관하는 벡터를 이웃이라고 정합시다.typedef vector Neighbors;class Graph..

반응형