1108

최민수·2023년 11월 8일
0

#define _CRT_SECURE_NO_WARNINGS
#include
#include
using std::cout;
class Cat {
private: //생략가능
int age;
char name[20];
// const char name; //A
public:
Cat(int age, const char
n) {
this->age = age;
strcpy(name, n); // name=n; //A
cout << name << "고양이 객체가 만들어졌어요.\n";
}
~Cat() { cout << name << "객체 바이\n"; };
int getAge();
const char getName();
void setAge(int age);
void setName(const char
pName);
void meow();
};
int Cat::getAge() {
return age;
}
void Cat::setAge(int age) {
this->age = age;
}
void Cat::setName(const char pName) {
strcpy(name, pName);
//strcpy(대상주소, 원본주소);
//strcpy_s(대상주소, 대상의길이, 원본주소);
//name=pName; //A
}
const char
Cat::getName() {
return name;
}
void Cat::meow() {
cout << name << "고양이가 울어요\n";
}


#define _CRT_SECURE_NO_WARNINGS
#include
#include
using std::cout;
class Cat {
private: //생략가능
int age;
std::string name;
// std::string name; //A
public:
Cat(int age, std::string n) {
this->age = age;
name = n;
cout << name << "고양이 객체가 만들어졌어요.\n";
}
~Cat() { cout << name << "객체 바이\n"; };
int getAge();
std::string getName();
void setAge(int age);
void setName(std::string pName);
void meow();
};
int Cat::getAge() {
return age;
}
void Cat::setAge(int age) {
this->age = age;
}
void Cat::setName(std::string pName) {
name = pName;
//strcpy(대상주소, 원본주소);
//strcpy_s(대상주소, 대상의길이, 원본주소);
//name=pName; //A
}
std::string Cat::getName() {
return name;
}
void Cat::meow() {
cout << name << "고양이가 울어요\n";
}



#define IN 1
#include
int main() {
const int x = 2;
int const y = 3;
const int z{ 4 };
constexpr int a = 5;
std::cout << IN << x << y << z << a;
return 0;
}

//const로 지정 시 변경 X



#include
class Dog {
int age; //private 생략함
public:
int getAge() const;
void setAge(int a) { age = a; }
void view() const { std::cout << "나는 view"; }// const 추가
};
int Dog::getAge() const
{
view(); // 오류 ①
return age; // 오류 ② // age++ -> age 멤버변수 age를 변경하여 나타난 오류
}


C++에서 new 연산자는 동적으로 메모리를 할당하기 위해 사용됩니다. new 연산자를 사용하여 동적으로 할당된 메모리는 프로그램의 실행 중에 생성되며, 필요하지 않을 때는 명시적으로 해제해주어야 합니다.

다음은 new 연산자를 사용하는 예시와 간단한 설명입니다:

int* p = new int; // int 타입의 변수를 동적으로 할당
*p = 10; // 할당된 메모리에 값 저장

double* arr = new double[5]; // double 타입의 배열을 동적으로 할당
arr[0] = 1.0;
arr[1] = 2.5;
// ...
delete[] arr; // 배열 형태로 할당된 메모리 해제

MyClass* obj = new MyClass(); // 사용자 정의 클래스 객체를 동적으로 할당
obj->memberFunc(); // 할당된 객체의 멤버 함수 호출
delete obj; // 객체를 할당한 메모리 해제

위의 예시에서 new 연산자를 사용하여 int, double, 그리고 사용자 정의 클래스 MyClass의 객체를 동적으로 할당하고 있습니다. 할당된 메모리는 포인터 변수에 저장되며, 포인터를 통해 해당 메모리에 접근할 수 있습니다. 할당된 메모리에 값을 저장하거나 객체의 멤버 함수를 호출할 수 있습니다.

메모리를 동적으로 할당한 후에는 delete 연산자를 사용하여 할당된 메모리를 해제해주어야 합니다. delete 연산자를 사용하여 개별 변수 또는 배열 형태로 할당된 메모리를 해제할 수 있습니다. 배열 형태로 할당된 메모리를 해제할 때에는 delete[] 연산자를 사용해야 합니다.

동적으로 할당된 메모리는 프로그램이 더 이상 사용하지 않을 때 명시적으로 해제해주어야 메모리 누수를 방지하고 리소스를 효율적으로 관리할 수 있습니다.

new 연산자와 delete 연산자는 C++의 메모리 관리에서 중요한 역할을 합니다. 그러나 C++11부터는 스마트 포인터와 RAII(Resource Acquisition Is Initialization) 개념을 사용하여 메모리 관리를 보다 안전하고 편리하게 할 수 있도록 지원하고 있습니다. 스마트 포인터를 사용하면 메모리 해제를 자동으로 처리할 수 있으므로 newdelete를 직접 사용하는 것보다 안전한 코드를 작성할 수 있습니다.



#include
int main()
{
int pi = new int; // 메모리 할당
int x;
if (!pi) { // pi==0, 널 포인터인지 확인
std::cout << "메모리할당이 되지 않았습니다.";
return 1; //비정상 종료시 리턴값
}
pi = 100; //주소의 값으로 100을 할당
x = 10;
std::cout << "동적메모리=" << *pi << ", x=" << x;
delete pi; // 메모리 해제
return 0; // 정상 종료시 리턴값
}

new 사용시 반드시 delete 사용

배열의 이름은 배열의 시작 주소

#define _CRT_SECURE_NO_WARNINGS
#include
#include
using std::cout;
class Cat {
private: //생략가능
int age;
std::string name;
public:
Cat(int age, std::string n) {
this->age = age;
name = n;
cout << name << "고양이 객체가 만들어졌어요.\n";
}
~Cat() { cout << name << "객체 바이\n"; };
int getAge() const ;
std::string getName() const;
void setAge(int age);
void setName(std::string pName);
void meow();
};
int Cat::getAge() const {
return age ;
}
void Cat::setAge(int age) {
this->age = age;
}
void Cat::setName(std::string pName) {
name = pName;
}
std::string Cat::getName() const {
return name;
}
void Cat::meow() {
cout << name << "고양이가 울어요\n";
}
const 사용

const는 C++에서 사용되는 한정자로, 변수 또는 함수를 선언할 때 사용됩니다. const를 사용하는 이유는 다음과 같습니다:

  1. 변수의 불변성 보장: const를 사용하여 변수를 선언하면 해당 변수는 불변성을 가집니다. 다른 부분에서 변수의 값을 변경할 수 없으므로, 의도치 않은 값의 변경을 방지하고 변수의 안정성을 보장할 수 있습니다.

  2. 코드의 가독성 향상: const를 사용하여 변수를 선언하면 해당 변수를 읽기 전용으로 사용한다는 의미를 명확하게 전달할 수 있습니다. 코드를 읽는 사람이 변수의 용도와 성격을 파악하기 쉬워지므로 가독성이 향상됩니다.

  3. 컴파일러의 최적화 도움: const 변수는 컴파일러에게 변수의 값이 변경되지 않는다는 정보를 제공합니다. 이 정보를 바탕으로 컴파일러는 코드를 최적화할 수 있으며, 성능 향상을 기대할 수 있습니다.

  4. 보안 강화: const를 사용하여 변수를 선언하면, 변수의 값을 읽을 수는 있지만 변경할 수는 없습니다. 이를 통해 보안에 민감한 데이터의 불변성을 보장할 수 있습니다.

  5. 함수 오버로딩을 위한 구분: const 한정자를 사용하여 함수를 오버로딩할 수 있습니다. 매개변수가 const인 함수와 const가 아닌 함수를 구분하여 사용자가 필요에 따라 알맞은 함수를 호출할 수 있습니다.

위와 같은 이유로 const를 사용하여 변수와 함수를 선언하면 코드의 안정성, 가독성, 최적화, 보안 등 다양한 측면에서 이점을 얻을 수 있습니다. 따라서 C++에서 변수와 함수를 정의할 때 const를 적절하게 활용하는 것이 권장됩니다.

profile
컴퓨터소프트웨어학과

0개의 댓글

관련 채용 정보