728x90

전체 글 274

[C++]06-2.클래스와 함수에 대한 friend 선언

1)A클래스가 B클래스를 대상으로 friend선언을 하면, B클래스는 A클래스의 private멤버에 직접 접근 가능 2)단, A클래스도 B클래스의 private멤버에 직접 접근 가능하려면, B클래스가 A클래스를 대상으로 friend선언 해줘야함 class Boy { private: int height; //키 friend class Girl; //Girl클래스를 friend로 선언함 public: Boy(int len): height(len) {} . . . . }; class Girl { private: char phNum[20]; public: Girl(char *num) { strcpy(phNum, num); } void ShowYourFriendInfo(Boy &frn) { cout

LANG/C++ 2023.05.13

[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
728x90