C++

10주차 강의 내용

wlsn 2024. 11. 5. 11:01

이 내용의 모든 ppt는 Smail.han의 ppt를 인용한 것입니다.

 

New라는 연산자에 대해 물었을때의 답이다.

 

 

const char*를 std::string으로 일괄 변경을 진행 했다.

 

변수를 상수화하는 법

 

함수 선언시 함수, 매개변수, 리턴형에서 const를 선언해 이들이 읽기전용 함수임을 나타낸다.

 

 

const 멤버에서는 멤버변수를 변경하는 치환연산이 불가능하고, const로 지정된 함수에서는 멤버변수의 값을 변경할 수 없다. 즉 get으로 시작하는 읽기전용 함수가 된다.

 

포인터변수의 자료형을 비유한다면 집주소에 int형으로 저장하고 옆 창고에 int,char형 데이터를 저장하는것
포인터 자체는 *을 달면 언제든 경찰처럼 집에 들이닥칠 수 있는 압수수색영장같은 것

#include <iostream>
int main()
{
	int x=1;
	std::cout << x << " " << &x;
	return 0;
}

위 소스의 결과값이고, 이 결과는 매번 달라진다.

 

32bit 와 64bit의 차이다.

 

#include <iostream>
int main()
{
	int x=1;
	int *px = &x; //x의 주소는 포인터 변수로 선언하기 위해 *를 써야한다.
	std::cout << x << " " << &x;
	return 0;
}

 

포인터 변수는 x의 주소를 가지고 있어 *만 붙인다면 언제든 찾아가서 값을 가져올 수 있다.

 

시험에 나오는 중요한 내용이다.

동적 메모리를 사용하는 이유는 프로그램이 끝날 때까지 값을 유지하고싶은 경우거나 프로그램을 실행 할 때 메모리의 양을 결정해야하는 경우다.

 

메모리를 할당할 때 new를 사용

할당된 메모리를 해제할 때 delete를 사용

 

동적메모리 할당을 보여주는 좋은 예시가 된다.

 

배열을 삭제하기위해 delete를 쓸 때는 대괄호를 넣어 삭제해주는것이 좋다.

 

배열의 이름은 배열의 시작주소 ★★★ (시험에 나오는 중요한 부분)

 

#include <iostream>
class Dog {
private:
	int age;
public:
	int getAge() const;
	void setAge(int a);
};
int Dog::getAge() const { return age; }
void Dog::setAge(int a) { age = a; }
int main()
{
	Dog* dp;
	dp = new Dog; // Dog *dp=new Dog
	if (!dp) {
		std::cout << "메모리할당 불가!";
		return 1;
	}
	dp->setAge(5);
	std::cout << "메모리에 할당된 값은 "
		<< dp->getAge() << "입니다.";
	delete dp;
	return 0;
}

getAge부분에 const를 써 고정시킬 수 있다.

 

#include <iostream>
class Dog {
private:
	int age;
public:
	int getAge() const;
	void setAge(int a);
};
int Dog::getAge() const { return age; }
void Dog::setAge(int a) { age = a; }
int main()
{
	Dog* dp;
	dp = new Dog[10]; // 객체배열 할당
	// Dog *dp=new Dog[10];
	if (!dp) {
		std::cout << "메모리할당이 되지 않았습니다.";
		return 1;
	}
	for (int i = 0; i < 10; i++) // C++에서는 가능
		dp[i].setAge(i);
	for (int i = 0; i < 10; i++)
		std::cout << i << "번째 객체의 나이는 " <<
		dp[i].getAge() << " 입니다. " << std::endl;
	delete[]dp;
	return 0;
}

배열객체 동적 할당을 보여준 코드다.

 

이런 식으로 표시가 되고 마지막에는 delete []dp가 된다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
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() const;
};
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() const { cout << name << "고양이가 울어요\n"; }

int main() {
	Cat nabi(1, "나비"), yaong(1, "야옹"), * pNabi;
	cout << nabi.getName() << " 출생 나이는 " << nabi.getAge() << "살이다.\n";
	cout << yaong.getName() << " 출생 나이는 " << yaong.getAge() << "살이다.\n";
	pNabi = &nabi;
	cout << pNabi->getName() << " 출생 나이는 " << pNabi->getAge() << "살이다.\n";
	nabi.setName("Nabi");
	nabi.setAge(3);
	cout << nabi.getName() << " 나이는 " << nabi.getAge() << "살이다.\n";
	yaong.meow();
	nabi.meow();
	return 0;
}

배열객체 동적 할당을 했다. 아래는 결과값.

 

'C++' 카테고리의 다른 글

11주차 강의 내용  (0) 2024.11.12
11주차 예습과제  (0) 2024.11.11
10주차 예습과제  (0) 2024.11.04
9주차 강의내용  (0) 2024.10.29
9주차 예습과제  (0) 2024.10.29