분류 전체보기 (110) 썸네일형 리스트형 c++ 9 (여러개의 헤더와 소스) 암묵적인 룰 일반적으로 많은 C++ 개발자는 헤더파일 한개와 소스파일 한개를 이용해 클래스를 정의하여 사용한다. 즉 한개의 클래스는 한개의 헤더파일과 한개의 소스파일을 갖게 된다. 이것은 언어에서 강제하는 사항은 아니지만 그렇게 하는 것이 미덕이다. 함수의 선언과 몸체를 분리할 필요가 있는 이유 animal.h #include // strcpy를 사용하기 위해서는 헤더파일 그 자체에 include되어 있어야한다. class Animal { public: int legs; char name[50]; Animal(int legs, const char* name) { this->legs = legs; strcpy(this->name, name); } void printInfo() { printf("동물의 이름.. c++ 8 (추가 개념 정리 / 피드백) 포인터와 주소값에 관련하여 함수에서 포인터를 리턴하는 경우 파라미터에서 포인터를 받는 경우 #define _CRT_SECURE_NO_WARNINGS #include #include int* foo(){// int*를 리턴하는 foo라는 함수, int*는 주소값 즉, 주소값을 리턴 int a = 100; return &a; // a의 주소값은 int*로 리턴된다 } int main (){ int v = 100; int* pv = &v; // v는 pv가 됐다, &v 즉 주소값은 포인터 변수에 할당이 될 수 있다. return 0; } int main (){ int v = 100; int* pv = &v; // &를 붙였을 때 주소값이 나온다 이 나온 주소값은 int*이다. 두개가 동일하다 타입이 같다 re.. c++ 6 (열거형 - 가독성을 위한 타입) 열거형 (Enumeration) : 소스코드를 한 번에 빠르게 읽을 수 있는 능력을 위해 탄생 열거형이란 프로그래머가 프로그래밍을 할 때 가독성을 위해 탄생한 데이터 형태 흔히 우리가 int라고 하여 값을 줄 수 있지만 이는 굉장히 기계친화적이며, 기계친화적이라 함은 사람에게는 굉장히 불편하다는 것 이다. 열거형이란 프로그래머가 프로그램 소스 코드를 관리하기 쉽게, 읽기 쉽게 하기 위해 나온 데이터 타입으로서 기본적인 선언, 사용방법은 클래스나 구조체를 선언하고 사용할 때와 같습니다. 다만 열거형으로 주어진 자료는 숫자가 하나씩 꼬리표로 붙을 수 있으며 이 꼬리표를 활용해 여러가지 옵션값을 줄 수 있게 됩니다. 예를 들어보자면 성별이라는 속성을 1, 2로 주기보다 MALE, FEMALE 이라는 문자화된 .. c++ 5 (가상함수 - Java, C# 등 다른 언어의 개념 까지 ) 가상함수 (Virtual) : 클래스의 실제 타입이 무엇인지 확인하면서 실행하게 하려면 virtual 키워드를 이용 오버라이딩 할 때, 부모클래스의 함수에서 virtual 키워드를 추가하게 되면 정상적으로 우리가 원하는 오버라이드된 함수를 찾아가서 실행하게 된다. 이렇게 virtual을 추가해주어야 하는 이유는 함수가 virtual이 아닐 때 더 빠른 실행속도가 보장되기 때문 Java / C# 에서의 virtual C#에는 virtual이 존재한다. Java에는 모든 클래스의 멤버함수가 virtual이다. 이는 C#은 어느정도 이런 성능을 생각하고 만들었으며, Java는 프로그램 개발의 편의성을 생각했기 때문에 그렇다. 자바에서는 다 virtual로 동작 #define _CRT_SECURE_NO_WARN.. c++ 4 (오버라이드 / 오버로드) 오버로드 (Overload) 동일한 이름을 갖고있지만 다른 동작을 하게 만드는 것 대표적으로 함수 오버로드가 있다. 함수 이름은 함수명을 포함한 파라미터의 타입의 나열들 까지 포함 -> 파라미터의 개수나 타입이 다르다면 서로 다른 함수명이 된다. 함수 오버로드를 통해 이름은 같지만 서로 다른 파라미터에 대해 각각의 동작을 따로 지정해줄 수 있다. 파라미터의 개수와 타입을 통해서 어떤 함수가 불러 지는지를 특정할 수 있다. 클래스에서의 함수 오버로딩 이는 클래스 멤버함수에서도 동일하게 작용하게 된다. 또한 클래스 생성자에 대해서도 동일하게 작용할 수 있는데 이는 클래스가 여러 개의 생성자를 가질 수 있다는 것을 의미 클래스 생성자도 어찌보면 함수라 할 수 있고, 클래스 생성자도 파라미터의 타입과 개수를 통.. 자바 ( 컬렉션과 제네릭) 컬렉션 : 데이터를 수집하고 관리해주는 객체 배열을 가지고 직접 사용하는 것들을 서비스 개념으로 사용하게 해주는 도구 데이터 관리를 대신해주는 객체, 데이터 크기를 가변적으로 바꿔줌 데이터를 수집하고 데이터를 삭제하고 데이터의 크기를 알려주는 기능을 기반으로 해서 만들어짐 배열을 직접 사용할 필요 없음 배열 안의 내용물이 어떻게 보관되는지 어떤 구조를 갖고있는지 관심 가질 필요 없을 때 컬렉션은 안에 저장소에 대한 내용은 숨기고 .add(3)를 줘서 값을 쉽게 담을 수 있다. 3을 어떻게 저장되었는지는 관심 없고 3을 가지게 되었다만 포커스 맞추기 수집에는 최적화된 도구 컬렉션 사용 목적 데이터 관리를 직접 할 필요 없다. 배열 공간의 크기를 늘릴 수 있다. 알아서 늘려준다. 가변 길이 배열 객체 정수형.. 자료구조 ( 실습 2 ) #define _CRT_SECURE_NO_WARNINGS #include #include #define MAX_SIZE 100 void main() { char name[MAX_SIZE]; char s1 [MAX_SIZE]; /* 문자열 입력 *Parameter 1 : 티켓 변수 *Parameter 2 : 버퍼 사이즈, 배열 사이즈 */ printf("이름 입력>>"); gets(name); printf("%s\n", name); strcpy(name, "Hello"); strcpy(s1, "World"); strcat(name, s1); printf("%s\n", name); strncpy(s1, name, 2); s1[2] = '\n'; printf("%s\n", s1); } #define _CRT_.. 자료구조 ( 실습 1 ) #include #include #define COMPARE(x, y) (((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1) #define MAX_TERMS 100 typedef struct { float coef; int expon; } polynomial; polynomial terms[MAX_TERMS]; int avail = 0; void padd(int starta, int finisha, int startb, int finishb, int* startd, int* finishd); void attach(float coefficient, int exponent); void main() { int startA = 0; int finishA = 0; int startB = 0;.. 이전 1 ··· 7 8 9 10 11 12 13 14 다음