[C++](41)
-
20. [C++] 복사 생성자의 호출시점
복사 생성자가 호출되는 시점 이들의 공통점은 "객체를 새로 생성해야 한다. 단, 생성과 동시에 동일한 자료형의 객체로 초기화해야 한다" 복사 생성자의 호출 횟수는 프로그램의 성능과도 관계있다. 메모리 공간의 할당과 초기화가 동시에 일어나는 상황 int num1=num2; 이 예시에서는 num1이라는 이름의 메모리 공간을 할당과 동시에 num2에 저장된 값으로 초기화시킨다. 즉, 할당과 동시에 초기화가 이뤄진다. 그리고 다음의 경우에서도 할당과 동시에 초기화가 이뤄진다. int SimpleFunc(int n) { . . . . } int main(void) { int num=10; SimpleFunc(num); //호출되는 순간 매개변수 n이 할당과 동시에 초기화! . . . . } 위의 코드에서 Simp..
2024.04.15 -
19. [C++] 깊은 복사와 얕은 복사
디폴트 복사 생성자는 멤버 대 멤버의 복사를 진행한다. 이러한 방식의 복사를 '얕은 복사'라고 하는데, 이는 멤버변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다. 디폴트 복사 생성자의 문제점 ShallowCopyError.cpp #include #include using namespace std; class Person { char * name; int age; public: Person(char * myname, int myage) { int len=strlen(myname)+1; name=new char[len]; strcpy(name, myname); age=myage; } void ShowPersonInfo() const { cout
2024.04.15 -
18. [C++]복사 생성자(Copy Constructor)
C++ 스타일의 초기화 기존 변수, 참조자 선언 및 초기화 방법 int num = 20; int &ref = num; C++에서의 변수, 참조자 선언 및 초기화 int num(20); int &ref(num); 위 두 가지 초기화 방식은 결과적으로 동일하다. C++에서는 위 두 가지 방식의 초기화를 지원한다. #include "stdafx.h" #include using namespace std; using namespace System; class SoSImple{ private: int num1; int num2; public: SoSImple(int n1, int n2) : num1(n1), num2(n2){} void ShowSimpleData(){ cout
2024.04.15 -
04-05 은행계좌문제 2단계
프로젝트 02단계 도입 이제 클래스에 대한 기본적인 내용들을 공부하였다. 이젠 문법적요소에 신경쓰기보다는 무엇을 클래스로 만들 것이며 어떻게 클래스를 정의할 것인가에 더 신경을 써야 한다! C++는 문법의 80프로 만 이해하고 있어도 실무 프로젝트에 무리 없이 진행 할 수 있다.그러나 클래스를 제대로 만들어 내지 못한다면 아무리 문법을 100프로 이해하고 있어도 프로젝트의 진행 자체가 불가능해진다 프로그램 설명 뱅킹시스템 1단계를 2단계로 업그레이드 시켜보자 . 1단계에서 정의한 구조체 Account를 클래스 Account로 변경해보자. 이는 키워드 struct를 class로 변경하라는 뜻이 아니다. 다음과 같은 내용들을 더불어 고민하라는 뜻이다. "어떻게 캡슐화를 시키고 정보 은닉시켜야 할까?" "생성..
2024.04.15 -
16. [C++] 생성자(Constructor)와 소멸자(Destructor)
'생성자'라는 것을 이용하면 객체도 생성과 동시에 초기화할 수 있다. 생성자의 이해 이러한 유형의 함수를 가리켜 '생성자'라고 하고, 다음의 형태를 가지고 있다. 클래스의 이름과 함수의 이름이 동일하다. 반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다. 객체 생성 시 딱 한번 호출된다. 생성자 호출 생성자도 함수의 일종이니 오버로딩이 가능하다. 생성자도 함수의 일종이니 매개변수에 '디폴트 값'을 설정할 수 있다. Constructor1.cpp #include using namespace std; class SimpleClass { int num1; int num2; public: SimpleClass() { num1=0; num2=0; } SimpleClass(int n) { num1=n; num..
2024.04.12 -
15. [C++] 객체지향 프로그래밍의 이해, 정보은닉, 캡슐화
실습 문제 다음의 Point 클래스를 기반으로 하여(활용하여) 원을 의미하는 Circle 클래스를 정의하자 class Point { private: int xpos, ypos; public: void Init(int x, int y) { xpos = x; ypos = y; } void ShowPointInfo() const { cout
2024.04.12