C++

C++ 10주차

kimbh 2023. 11. 9. 16:17

실습 1 10주차부터 사용하게 될 기본 소스

소스코드
출력

const char*와 strcpy은 기말에 나오니 참고.

실습 2 const char* 에서 std::string으로 바꾸기.

 

 

std::string을 하게 되면 strcpy를 할 필요없이 매개변수에 그냥 대입해서 편하게 할 수 있다.

37줄에 보면 원래 name = Name으로 되어 있었는데 name 앞에 this -> 붙였다 그 이유는 같은 변수명으로 되어 있으면 헷갈릴 수 있기 때문에 name이라는 변수명을 포인터 해줌으로써 주소 값으로 받아들여 헷갈리지 않게 하기 위함이다.

 

실습 3 Const 변수

const를 이용한 예제임. const를 사용하게 되면 변수의 값이 변경이 불가능하기 때문에 다른 값으로 초기화 시키면 오류가 생김.

1줄에는 전처리기을 이용해서 IN 변수를 1로 초기화 함.

멤버 함수 뒤에 const를 넣게 되면 멤버 변수를 변경하지 못 함.
getAge() const를 사용하게 되면 11줄에 함수를 호출 할 경우 7줄에 const를 붙여야 오류가 안생긴다.
해결 방법은 21줄을 없애거나 21줄을 안 지우고 20줄에 const를 지우면 해결이 된다.

실습 4 동적 메모리 할당 과 정적 메모리 할당

pi라는 포인터 변수명에 동적 메모리를 할당 시켜서 stack 에서 heap부분에 주소로 가서  100이라 값을 할당 시킨것을 알 수 있음.
delete pi를 시킴으로써 동적 메모리를 해제 해 값이 사라진걸 알 수 있음. delete를 사용하지 않게 될 시 heap에서 메모리를 할당한 pi가 계속 메모리를 잡고 있어서 다른 프로그램에서 사용하지 못하게 됨 그래서 garbage(쓰레기 값)라고 불림.
new 연산자를 사용하게 되면 delete 연산자를 무조건 사용해야 함. delete 부분에 []pi에서 대괄호("[ ]")를 사용하지 않으면 안되기 때문에 주의해야 한다.
실습 예제 5.5
실습 예제5.6

#include <iostream>
class Dog {
private:
	int age;
public:
	int getAge();
	void setAge(int a);
};
int Dog::getAge()
{
	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;
}

실습5 

#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 ; //멤버 함수에 const 함수를 넣음.
	std::string getName()const;
	void setAge(int age);
	void setName(std::string pName);
	void meow()const; //멤버 함수에 const 함수에 넣음
};
int Cat::getAge()const{ // 정의 한 부분에도 같이 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 { // 정의 한 부분에도 같이 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++' 카테고리의 다른 글

C++프로그래밍 12주차  (0) 2023.11.23
C++ 프로그래밍 11주차  (0) 2023.11.16
C++ 8주차  (0) 2023.11.02
C++7주차  (0) 2023.10.19
6주차  (0) 2023.10.12