본문 바로가기

C & C++/윤성우의 열혈 C++ 프로그래밍10

[열혈 C++] private 접근제어지시자의 정확한 범위 private private의 뜻은 클래스를 공부한 사람이라면 누구나 알고 있을 것입니다. private은 외부로부터의 접근을 제한한다는 뜻입니다. 그렇다면 접근자가 같은 클래스이지만 다른 객체라면 private 영역에 접근할 수 있을까요? 답은 '그렇다'입니다. 만약 private이 같은 클래스의 다른 객체에서의 접근까지 제한한다면 복사생성자나 연산자 오버로딩을 하지 못했을 것입니다. #define _CRT_SECURE_NO_WARNINGS #include using namespace std; class SimpleClass { private: int num; public: SimpleClass(const SimpleClass& copy) :num(copy.num) //같은 SimpleClass이지만 .. 2024. 2. 20.
[열혈 C++] 생성자와 소멸자 생성자 생성자란 반환값이 없고 클래스와 이름이 같은 멤버함수로 클래스 객체가 생성될 때 한 번만 호출되는 함수입니다. 생성자도 함수이므로 오버로딩이 가능하고 디폴트 값을 설정할 수 있습니다. 그럼 간단한 생성자 예제를 작성해 보겠습니다.#define _CRT_SECURE_NO_WARNINGS#include using namespace std;class A {private: int num1;public: A(int num) { //생성자 정의 num1 = num; } void ShowNum() { cout ShowNum(); delete clsA2; return 0;}3050디폴트 생성자 모든 객체는 만들어질 때 하나의 생성자가 호출되어야 .. 2024. 2. 11.
[열혈 C++] 정보 은닉과 캡슐화 정보 은닉 정보 은닉이란 코드(클래스)에서 외부에서 함부로 접근하였을 때 문제가 될 수 있는 데이터를 안쪽으로 숨겨서 코드의 안정성을 높이는 것을 말한다. 안쪽으로 숨긴다는 것은 private: 처리를 하여 클래스 내부에서만 접근할 수 있게 하는 것을 말한다. 정보은닉을 하게 되면, 외부에서의 접근을 제한할 뿐만 아니라 프로그래머의 실수로 인한 오류도 잡아내기 쉬워진다. #include using namespace std; class point { public: int xpos; //좌표의 범위는 0~100 int ypos; void PrintPos() { cout 2024. 2. 4.
[열혈 C++] C++에서의 파일 분할 파일 분할 C++에서는 클래스별로 파일을 나눕니다. 각 클래스에서 헤더와 소스를 분리합니다. 헤더파일에는 클래스의 선언을, 소스파일에는 클래스의 정의(멤버함수의 정의)를 담습니다. 하지만 멤버함수를 인라인 처리할 경우 인라인 된 함수는 헤더파일에 넣어야 합니다. 헤더파일 : 클래스의 선언, 인라인 함수 소스파일 : 멤버함수의 정의를 포함한 클래스의 정의 #ifndef, #define, #endif 헤더파일을 디자인할 때는 헤더파일의 중복을 막기 위해 #ifndef, #define, #endif를 사용합니다. ifndef : 만약 정의되지 않았다면 #endif까지 유효한 코드로 만든다. define : 정의 한다. endif : #ifndef의 끝을 나타낸다. #ifndef HEAD #define HEAD.. 2024. 2. 4.
[열혈 C++] 구조체와 클래스 C++에서의 구조체 정의 방법 C++에서는 typedef 선언의 필요 없이 간단하게 구조체를 정의하고 선언할 수 있습니다. Car라는 구조체를 정의하기 위해서 struct Car { 데이터 }; 의 형태로 정의를 하고 선언할 때 struct 없이 Car car; 형태로 선언하면 됩니다. 또한 C++에서는 구조체 관련 함수를 구조체 안에 삽입할 수 있습니다. 구조체 안에 함수를 삽입하게 되면 함수가 무엇과 관련한 함수인지 파악하기 용이하고 구조체 안에 들어간 함수는 자동으로 inline처리가 됩니다. 간단한 예제를 작성해 보겠습니다. #include using namespace std; struct Car { int carspeed; void Accel() { carspeed += 10; cout 2024. 2. 4.
[열혈 C++] malloc & free를 대신하는 new & delete new & delete new & delete는 C++에서 동적할당을 하기 위해 사용합니다. malloc & free와 달리 인자를 바이트 크기대로 전달할 필요가 없고 형 변환도 필요 없다는 장점이 있습니다. 데이터형 * 포인터이름=new 데이터형; 데이터형 * 포인터이름=new 데이터형[배열의길이]; //배열의 경우 delete 포인터이름; delete []포인터이름; //배열의 경우 그럼 new & delete를 사용하는 간단한 예제를 작성해 보겠습니다. #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; int main() { int len; cout len; char* ptr = new char[len]; cout ptr;.. 2024. 1. 24.