728x90

LANG 47

[C++]06-3.C++에서의 static

C언어에서 얘기한 static 1)전역변수에 선언된 static의 의미 -> 선언된 파일 내에서만 참조를 허용하겠다는 의미 2)함수 내에 선언된 static의 의미 ->한번만 초기화되고, 지역변수와 달리 함수르 빠져나가도 소멸 x if static 없이 전역변수 선언하는 경우 제한을 지켜줄만한 아무런 장치도 존재 x -> 문제 일으킬 소지 매우 높음 static 멤버변수(클래스 변수) if class SoSimple { private: static int simObjCnt; //static 멤버변수, 클래스 변수 public: SoSimple() { simObjCnt++; cout

LANG/C++ 2023.05.13

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