728x90

C++ Programming 10

C++과 C#의 차이점

C++과 C#의 차이점 1. C++에서는 메모리 동적 할당 후에 delete나 free로 동적 메모리 할당 해제를 시켜야 하지만, C#은 JAVA 언어와 유사하게 new 연산자로 할당받은 후에 해제할 필요 없이 Garbage Collector가 알아서 동적 할당 해제를 시켜줍니다. 2. C#에서는 C++과 다르게 타입을 변환해 캐스팅하는 것이 불가능합니다. 3. C#에서는 C++과 다르게 정적 배열을 선언할 때 적당히 큰 수를 집어넣으면 범위 초가 예외가 생깁니다. 4. C#에서는 C++과 다르게 전역 함수, 전역 변수, 프렌드 함수가 없습니다. 따라서 모든 인스턴스와 메서드는 어떤 클래스의 멤버에 반드시 속해야 합니다. 5. C#은 JAVA와 유사하게 기본 자료형까지도 객체입니다. C# 모든 객체들의 ..

C++ Programming 2022.02.08

C++ iterator 반복자 STL sort 알고리즘

C++ iterator 반복자 STL sort 알고리즘 반복자 객체 생성 vector ::iterator it; 반복자 증가 it++; 반복자가 가리키는 값 반환 int n = *it; 반복자가 가리키는 값에 대입 *it = n; 반복자 시작 위치 반환 it = v.begin(); 반복자 끝 위치 반환 it = v.end(); 반복자 원소 삭제 it = v.erase(it); 첫 번째 : 시작 주소 두 번째 : 다음 주소 sort(v.begin(), v.begin() + 3); sort(v.begin(), v.end()); // 처음부터 끝까지 #include #include #include using namespace std; int main(){ vector v; v.push_back(1); v.pu..

C++ Programming 2021.12.16

C++ 제네릭 템플릿 클래스

C++ 제네릭 템플릿 클래스 제네릭 : 자료형의 일반화, 오버라이딩과 함께 구현시, 오버라이딩의 우선순위가 더 높다. 템플릿 : 제네릭 타입을 이용해 함수나 클래스를 일반화 한것이다. template void Swap(T1 & a, T2 & b); // 메인함수 전에도 템플릿 클래스 명시 int main(){} template void Swap(T1 & a, T2 & b){ T tmp; tmp = a; a = b; b= tmp; } 벡터 선언 vector v; 벡터 요소 추가 v.push_back(1); 벡터 유효 크기 반환 int s = v.size(); 벡터 할당 크기 반환 int c = v.capacity(); 벡터 인덱스 추가 v.at(2) = 5; 벡터 값 반환 int n = v.at(1); 벡..

C++ Programming 2021.12.14

C++ 다형성 다운 캐스팅 업 캐스팅

C++ 다형성 다운 캐스팅 업 캐스팅 부모 클래스의 포인터/레퍼런스 형으로만 자식 객체를 업 캐스팅할 수 있다. Person* pPerson = new UnivStudent; UnivStudent* pStud = (UnivStudent*)pPerson; dynamic_cast (exp)를 사용해 객체의 타입을 알아본다. 가상 함수 선언은 필수이고, 부모 소멸자를 가상 함수 virtual로 만드는 것이 일반적이다. -type-id* 포인터로 다운 캐스팅 타입을 지정한다, -exp 표현식 type-id를 포인터형으로 객체 주소 값을 반환한다. int main(){ Person* list[2]; // 객체 포인터 배열을 활용한다. list[0] = new Person(); list[1] = new UnivSt..

C++ Programming 2021.12.12

C++ 부모 자식 상속

C++ 부모 자식 상속 상속 : 연관된 클래스 공통, 배열 생성 위해 public으로 선언 부모 클래스 private 멤버에 직접 접근하지 못해 access 함수를 사용해 접근한다. //부모.h 가상함수 class Person{ int age; char name[50]; public: Person(const char* name, int age); void WhatYourName() const; void HowOldAreYou() const; const char* GetName() const {return name}; virtual void WhoAreYou() const; // 부모의 가상함수 선언시에만 virtual 키워드를 붙인다. }; // 자식.h 생성자 char* 포인터 #define _CRT_..

C++ Programming 2021.12.10

[ C++ ] 레퍼런스 Reference 캡슐화 Encapsulation 정보은닉 Private

[ C++ ] 레퍼런스 Reference 캡슐화 Encapsulation 정보은닉 Private 레퍼런스 Reference 레퍼런스를 잘 이용해야 한다.. 레퍼런스는 객체를 줄 때 지역변수와 차이가 없어 보인다.. 레퍼런스 객체의 상호작용을 중시하자. 클래스 밖에 선언된 상수는. h에서 정의한다. inline 함수는. h에서 정의한다 상수 정의 앞에 const를 추가해,. h에 저장한다 상수를 선언만 가능하고 값 할당은 불가능 레퍼런스를 이용해 객체를 받고 참조한다. 멤버 함수에 있는 멤버 변수는 그 객체에 적용이 된다.. 멤버 함수는 을. 멤버 변수 직접 접근 X 생성자, 초기화 함수 만들 때 오른쪽 부분이 아닌 왼쪽 부분의 인수에 디폴트 값을 지정하자 매개변수는 오른쪽부터 참조된다. void Init..

C++ Programming 2021.11.08

[ C++ ] Class 클래스 정의와 객체 선언

[ C++ ] Class 클래스 정의와 객체 선언 class 정의 C++에서는 클래스 정의도 하나의 선언문이기 때문에 반드시 세미콜론;으로 끝나야 한다.. C++의 멤버 필드(속성), 멤버 함수(행위)의 기본 접근 지정자는 private이다. JAVA의 기본 접근 지정자는 public이다. 객체 외부에서 멤버 함수를 호출할 수 있도록 대부분의 멤버 함수는 public이다. C++에서는 일반적으로 클래스 정의 안에 멤버 함수의 프로토타입만 선언하고 함수에 대한 것은 다른 cpp에 저장한다. 멤버 필드는 일반적으로 private에 지정해 캡슐화가 되도록 한다. instance 멤버 필드 (기본적) 각 객체 생성 시 별도의 메모리 할당 static 멤버 필드 (전역) instance 멤버 함수 static 멤..

C++ Programming 2021.11.07

[ C++ ] 반환 자료형의 세가지 형태, 매개변수의 세가지 형태

[ C++ ] 반환 자료형의 세 가지 형태, 매개변수의 세 가지 형태 [매개변수의 세 형태] 값에 의한 전달 > 인수에 영향을 주지 못함 주소에 의한 전달 (포인터) 레퍼런스에 의한 전달 (레퍼런스) 한계 : 함수 호출 문을 보고 값에 의한 전달인지 레퍼런스에 의한 전달인지 모른다. const 레퍼런스를 사용하면 실 인수 변경이 불가능하다. 매개변수를 통한 변경을 방지할 때 사용할 수 있다. [반환 자료형의 세 형태] 1. 값에 의한 반환 (복사 반환) main() int x; int y; y = increment(x); int increment(int n){ n = n + 1; return n;} 2-1. 주소(*)에 의한 반환 (포인터 매개변수, 주소 값 반환) main() int x; int* y;..

C++ Programming 2021.11.06

[ C++ ] 네임스페이스 :: namespace 포인터 Pointer

[ C++ ] 네임스페이스 :: namespace 포인터 Pointer 네임스페이스 네임스페이스는 특정 공간에 이름을 붙여 주기 위한 문법 요소이다.. ::을 사용하고 이름 공간 중첩 가능하다. 문자열을 매개변수에 전달하려고 할 때 const char* str을 사용한다. const 레퍼런스 const 레퍼런스는 상수 기능을 한다. 포인터로 값을 수정하려고 해도 수정 불가능하다. 문자열은 기본적으로 포인터를 사용해 간접 참조 활용한다. 모자란 인수 대신 매개변수의 기본값이 사용된다. 기본값 설정은 함수 선언 부분(맨 앞)에(맨앞) 명시한다. void function(int n = 0); 따라서 매개변수의 기본값은 오른쪽에 치우쳐 기술되어야 함. JAVA에서는 매개변수의 기본값을 설정할 수 없다. C의 메..

C++ Programming 2021.11.05

[ C++ ] 객체지향 프로그래밍 C++

[ C++ ] 객체지향 프로그래밍 C++ C++은 C보다 더 엄격한 type-checking을 수행한다. 최대한 상호작용하여 객체지향적으로 프로그래밍하자. 객체 : 연관된 정보들의 묶음. 데이터와 알고리즘을 하나에 넣는 것이다. 이 문제를 풀기 위해서 어떤 객체가 필요한가 가 중요하다. 실생활과 밀접하다. 문제를 크게 보아 상향식 설계로 작은 단위의 필요한 객체들을 만들고 더 큰 단위의 객체를 생성한다. 즉, 낮은 수준의 객체를 이용하여 더 높은 수준의 객체를 작성하는 것이다. 객체지향적으로 객체를 이용하면 외부의 작업에 의해서가 아니라 내부적으로 밥을 지을 수 있어야 한다.. 객체와 객체가 서로 상호작용한다. 많은 함수 호출 메커니즘이 필요하다. 개념 정의 네임스페이스 (JAVA 패키지) : 식별자가 ..

C++ Programming 2021.11.04
728x90