728x90

LANG/C++ 42

[C++]06-1.const와 관련해서 아직 못다한 이야기

const int num = 10; 이렇게 변수를 상수화하듯이 const SoSimple sim(20): 객체도 상수화 가능 객체에 const선언이 붙게 되면, 객체를 대상으로는 const멤버함수만 호출이 가능. "객체의 데이터 변경을 허용하지 않겠다!" 멤버변수에 저장된 값을 수정하지 않는 함수는 가급적 const로 선언해야... -> 안전성 확보 const와 함수 오버로딩 void SimpleFunc(){. . .} void SimpleFunc(){. . .} const 이런 형태로도 오버로딩이 됨.

LANG/C++ 2023.05.13

[C++]05-2.'깊은 복사'와 '얕은 복사'

디폴트 복사 생성자의 문제점 얕은 복사 - 멤버변수가 힙의 메모리공간을 참조하는 경우에 문제가 됨 일반적인 실행 결과 = 문자열이 한 번만 출력됨. 얕은 복사 때문에 발생하는 문제 깊은복사를 하면 객체 별로 각각 문자열을 참조하므로 위와 같은 문제 해결 가능. Person(const Person& copy):age(copy.age) { name = new char[strlen(copy.name) + 1]; strcpy(name, copy.name); } 위 코드가 하는 일 -멤버변수 age의 멤버 대 멤버 복사 -메모리 공간 할당 후 문자열 복사, 할당된 메모리의 주소 값을 멤버 name에 저장

LANG/C++ 2023.05.13

[C++]04-4.클래스와 배열 그리고 포인터

1.객체 배열 SoSimple * ptrArr = new SoSimple[10]; 배열 선언 이후에 각각의 요소를 원하는 값으로 초기화시키길 원한다면 일일히 초기화의 과정을 거쳐야 함 #include #include using namespace std; class Person { private: char *name; int age; public: Person(char *myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy(name, myname); age = myage; } Person() { name = NULL; age = 0; cout

LANG/C++ 2023.05.12

[C++] 04-3.생성자(Constructor)와 소멸자(Destructor)

지금까지 멤버변수 초기화를 목적으로 InitMembers를 호출했는데 이를 쉽게 대체해주는 자식 생성자: 객체도 생성과 동시에 초기화 가능하게 함 class SimpleClass { private: int num; public: SimpleClass(int n) { num = n; } int GetNum() const { return num; } }; - 클래스의 이름과 함수의 이름이 동일 - 반환형이 선언되어 있지 않으며, 실제로 반환하지 않음 - 객체 생성 시 딱 한번 호출됨 SimpleClass sc; //전역, 지역 및 매개변수의 형태 SimpleClass *ptr = new SimpleClass; //동적 할당의 형태 생성자가 정의되었으므로 SimpleClass sc(20); //생성자에 20을..

LANG/C++ 2023.05.12

[C++]04-1.정보은닉(Information Hiding)

if) 좌상단 좌표값 하나 (0 이상 100 이하), 우하단 좌표값 하나(0 이상 100 이하)를 받아서 직사각형을 정의하는 class를 만드는 경우 ->1 ) 좌표값은 0 ~ 100을 벗어나선 안되며 2) 좌상단 좌표 < 우하단 좌표여야 함. 이것이 벗어나면 오류를 나타내야 함 정보은닉이 필요한 이유 : 1) 제한된 방법으로의 접근만 허용해서 잘못된 값이 저장되지 않도록 도와야 하고 2)실수했을 때 실수가 쉽게 발견되도록 해야 함 like this //Point.h class Point { private: int x; int y; ... } //Point.cpp bool Point::InitMembers(int xpos, int ypos) { if(xpos < 0 || ypos < 0) { cout x..

LANG/C++ 2023.05.12

[C++]03-3.객체지향 프로그래밍의 이해

1.객체지향 프로그래밍의 이해 현실에 존재하는 사물, 대상, 그에 따른 행동을 있는 그대로 실체화시키는 형태의 프로그래밍 "나는 과일장수에게 2000원을 주고 두 개의 사과를 구매했다." (굵은 글씨가 객체) 2.객체를 이루는 것은 데이터와 기능입니다. 과일장수의 관점을 '과일 판매'에 두면 1) 과일장수는 과일을 팜 -> 행동(behavior) 2)과일장수는 사과 20개, 오렌지 10개를 보유하고 있음 -> 상태(state) 3)과일장수의 과일판매 수익은 현재까지 5만원임 -> 상태(state) 객체는 하나 이상의 상태 정보(데이터)와 하나 이상의 행동(기능)으로 구성됨 상태정보: 변수 통해서 표현/ 행동 : 함수 통해서 표현 *보유하고 있는 사과의 수 -> int numOfApples; *판매 수익 ..

LANG/C++ 2023.05.12

[C++]03-2.클래스(Class)와 객체(Object)

1.클래스와 구조체의 유일한 차이점 struct Car { } struct 대신에 class로 바꾸면 그냥 class임 class Car { } Car run99; (0) Car run99 = {"run99", 100, 0}; (x) 클래스는 이런 식으로 변수 선언 못함 따로 초기화하는 함수를 만들어줘야 함 접근과 관련해서 별도의 선언을 하지 않으면, 클래스 내에 선언된 변수 및 함수에 대한 접근 허용하지 않으니 접근과 관련된 지시를 별도로 내려야 함! 2.접근제어 지시자(접근제어 레이블) 1)public : 어디서든 접근허용 2)protected : 상속 관계에 놓여있을 때 , 유도클래스에서의 접근허용 3)private : 클래스 내(클래스 내 정의된 함수)에서만 접근허용 구조체와 클래스 둘 다 접근제..

LANG/C++ 2023.05.12
728x90