반응형

언어 자료구조 알고리즘 1251

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

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

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (레퍼런스 변수)

- 레퍼런스 변수의 등장 C++언어에서는 변수 선언 시에 다른 변수에 의해 할당된 메모리를 참조하는 레퍼런스 변수를 선언할 수 있습니다. 이 경우에 레퍼런스 변수는 별도의 메모리가 할당되지 않습니다. 이러한 이유로 레퍼런스 변수는 선언 시에 우항에 l-value(대입 연산자의 좌항에 올 수 있는 표현을 말함)가 와야 합니다. 주의할 것은 레퍼런스 변수는 선언 부 이외에는 기존 변수처럼 값 기반으로 동작합니다.

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항(태그명, 변수 선언 위치)

1.2.2 편의성 제공 C++언어에서는 신뢰성에 문제가 되지 않는 범위에서 사용자에게 많은 편의성을 제공하고 있습니다. 이번에는 C언어에서는 없었던 문법 사항 중에 사용자 편의성에 관한 부분을 다루어 봅시다. - 태그 명이 형식 명으로 사용 C언어에서는 사용자 정의 형식의 변수를 선언할 때 명명하는 태그 명(struct, union, enum 뒤에 오는 명칭)을 바로 형식 명으로 사용할 수 없습니다. 이럴 때 typedef을 통해 형식 명을 정의하거나 혹은 struct Stu stu;와 같이 키워드와 태그 명을 붙여 변수를 선언해야 합니다. C++에서는 태그 명을 바로 형식 명으로 사용할 수가 있기 때문에 Stu stu;와 같은 표현을 할 수 있습니다.

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

- bool 형식의 제공 프로그래밍을 하다 보면 특정 연산 결과가 참인지 거짓인지를 판별해야 하는 경우가 많이 있습니다. C언어에서는 이러한 경우를 위한 별도의 연산자를 제공하지 않고 있습니다. 물론, C언어에서 어떠한 변수의 값이 0이면 거짓, 그 이외의 값일 경우에 참으로 인식하기 때문에 프로그래밍할 때 큰 지장이 생기지는 않습니다. 하지만 참과 거짓만을 값으로 갖는 별도의 형식을 제공하는 것보다는 가독성이 떨어질 수 있습니다. C++언어에서는 이 같은 경우에 사용할 수 있는 bool 형식을 제공하고 있습니다. bool 형식은 값으로 true나 false를 가질 수 있으며 이를 통해 좀 더 가독성이 높고 신뢰성 있는 코드를 작성할 수 있습니다.

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (const 포인터, void 포인터)

- const 포인터 함수를 호출할 때 호출부에서 전달하는 문자열을 피 호출 함수에서 변경하지 않기를 기대할 수가 있습니다. strcpy 함수의 원본 문자열이나 strcmp 함수에 전달되는 문자열은 해당 함수 내부에서 변경하지 말아야 합니다. 이 같은 경우에 const 포인터를 사용하여 입력 매개 변수를 약속하게 됩니다. const 포인터로 입력 매개 변수를 약속하는 것은 해당 함수를 호출하면 전달된 메모리 주소에 있는 값을 변경하지 않겠다는 약속이기 때문에 신뢰하고 사용할 수 있습니다. 그런데 C언어에서는 이처럼 약속하고서 실제 피 호출 함수 내부에서 전달받은 메모리 주소에 있는 값을 변경하는 구문을 사용하더라도 컴파일 오류를 발생하지 않고 경고만 발생합니다. C++ 언어에서는 이럴 때 컴파일 오류를 ..

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

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

[C++] 1. C++에 들어가면서

1. 1 C++소개 "C++이 무엇인가요?" 라는 질문에 대한 답변은 다양하게 나올 수 있을 것입니다. 저는 C++ 강의를 시작하면서 이에 대한 답변으로 "C++ is a c with class."라고 얘기를 합니다. 이렇게 얘기를 하는 이유는 C++ 언어가 C와 무관한 언어가 아니라 C언어의 문법에 새로운 문법 사항으로 클래스가 추가되었음을 강조하기 위함입니다. 이 책도 C언어 기본 문법을 이해하고 있는 독자를 대상으로 작성하였습니다. 그렇지만 C++ 언어는 클래스를 제외하고도 C언어와 차이가 있는 문법 사항이 많이 있습니다. 여기서는 이러한 사항들에 대해서 먼저 다루려고 합니다. 그리고 이후에는 될 수 있으면 추가된 클래스 문법과 개체 지향에 초점을 두어 기술하고자 합니다. 참고로 이 책에서는 템플릿..

12.4.2 크루스칼 알고리즘 소스 코드 [디딤돌 자료구조와 알고리즘 with C++]

12.4.2 크루스칼 알고리즘 소스 코드다음은 앞에서 작성한 크루스칼 알고리즘 소스 코드입니다. //Edge.h#pragma once#include using namespace std;class Edge{ string vt1; string vt2; int weight;public: Edge(string vt1,string vt2,int height); bool Exist(string vt)const; bool Exist(string vt1, string vt2)const; string Other(string vt)const; void View()const; int GetWeight()const; string GetVt1()const; string GetVt2()const;}; //Edge.cpp#incl..

12.4.1 크루스칼 알고리즘 구현 [디딤돌 자료구조와 알고리즘 with C++]

12.4.1 크루스칼 알고리즘 구현간선은 프림 알고리즘에서 구현한 것과 차이가 없습니다. 그래프도 대부분 비슷합니다. 여기에서는 차이가 있는 부분만 설명할게요. 이번에는 간선을 선택할 때 간선의 비중이 같을 때 그래프에 먼저 추가한 간선을 선택하게 합시다. 이를 위해 Graph에 간선을 추가하는 부분을 수정할게요.bool Graph::AddEdge(string vt1, string vt2,int weight)//간선 추가{ if(Exist(vt1)&&Exist(vt2)) { if(Exist(vt1,vt2)) { return false; } CEIter seek = edges.begin(); CEIter last = edges.end(); for( ;seek != last; ++seek) {프림 알고리즘에..

12.4 크루스칼 알고리즘 [디딤돌 자료구조와 알고리즘 with C++]

12.4 크루스칼 알고리즘이번에는 크루스칼 알고리즘으로 최소신장트리를 만드는 방법을 알아봅시다. 프림 알고리즘은 최적의 정점을 선택하여 최소신장트리를 만드는 방법입니다. 반면 크루스칼 알고리즘은 최적의 간선을 선택하여 최소신장트리를 만드는 방법입니다. 크루스칼 알고리즘선택한 간선 0으로 설정원본 그래프의 간선 집합을 복제복제한 간선 집합을 비중 순으로 정렬반복(선택한 간선 개수가 graph의 정점 개수-1 보다 작다면) 조건(탐욕스런 간선을 선택이 실패 반복문 탈출 아니면 선택한 간선 개수 1 증가 최적의 간선은 비중이 작은 간선 중에 선택합니다. 그런데 선택한 간선을 현재까지 만들고 있는 그래프(최소신장트리)에 추가하였을 때 사이클이 발생하지 말아야 합니다. 이를 효과적으로 구현하기 위해 원본 그래프의..

반응형