c++ 클래스

2023. 10. 19. 16:46C++

구조체

#include <iostream>
struct Dog {
	int age;
	double weight;

};
int main()
{
	Dog coco; //.c에서는 반드시 struct를 써야한다 c++에서는 생략 가능
	coco.age = 1;
	coco.weight = 1.4;
	std::cout << coco.age << std::endl << coco.weight;

	return 0;
}

Dog형 변수에 나이와 몸무게를 입력하고 출력하는 소스

 

 

#include <iostream>
class Dog {    
//public: //기본 설정인 private에서 public로 변경
//private:
	int age;
	double weight;

};
int main()
{

	Dog coco; //.c에서는 반드시 struct를 써야한다 c++에서는 생략 가능

	coco.age = 1; / coco.age = 1; 
	// : error C2248 : 'Dog::age' : private 멤버('Dog' 클래스에서 선언)에 액세스할 수 없습니다.

	coco.age = 1; 
	coco.weight = 1.4;
	std::cout << coco.age << std::endl << coco.weight;

	return 0;
}

위 소스처럼 struct를 class로 바꾸면 주석과 같이 엑세스 할 수 없다는 오류가 발생한다

이유는 class는 접근제어 속성을 생략하면 struct은 public, classprivate이 기본 설정이기 때문이다.

 

 

 

클래스 안에서 맴버함수 정의

위 소스에서 class의 이름은 Integer 이며 객체의 이름을 정의하는 방법은 1번과 2번이 있지만 보통 2번 방법을 많이 사용한다.

#include <iostream>
class Dog {    
//private: class의 기본 접근속성이 private이기 때문에 생략이 가능하다.
	int age;
	double weight;
public://접근속성을 public으로 변경
	int getAge()
	{

		return age;
	}
	void setAge(int a)//매개변수(parameter) a
	{
		age = a;
	}
	double getWeight()
	{
		return weight;
	}
	void setWeight(double a)
	{
		weight = a;
	}
	void run()
	{
		std::cout << "달린다.................\n";
	}
};
int main()
{

	Dog coco;
	coco.setAge(1);//접근속성이 public 이기 때문에 접근이 가능 함수를 호출하여 argument 1 전달
	coco.setWeight(1.5);
	std::cout << coco.getAge() << std::endl<<coco.getWeight()<<std::endl;
	coco.run();

	return 0;
}

Dog클래스의 맴버함수를 통해 age와 weight의 값을 받는다.

 

각 언어별 기본 접근 속성(하이라이트)

c++는 private가 기본 접근 속성인걸 확인 할 수 있다.

 

c++의 Class에서 접근 권한 3가지

 

 


함수 정의, 호출, 선언 복습


클래스 다이어그램

클래스 간의 관계와 구조를 시각적으로 나타낸 것이다

	#include <iostream>
	class Dog {    
	//private: class의 기본 접근속성이 private이기 때문에 생략이 가능하다.
		int age;
		double weight;
	public://접근속성을 public으로 변경
		int getAge()
		{

			return age;
		}
		void setAge(int a)//매개변수(parameter) a
		{
			age = a;
		}
		double getWeight()
		{
			return weight;
		}
		void setWeight(double a)
		{
			weight = a;
		}
		void run()
		{
			std::cout << "달린다.................\n";
		}
	};
	int main()
	{

		Dog coco;
		coco.setAge(1);//접근속성이 public 이기 때문에 접근이 가능 함수를 호출하여 argument 1 전달
		coco.setWeight(1.5);
		std::cout << coco.getAge() << std::endl<<coco.getWeight()<<std::endl;
		coco.run();

		return 0;
	}

위 소스의 클래스 다이어그램은?

 

접근 권한이

private이면 - public이면 + 

클래스 이름: Dog
-age:int
-weight:double
+getAge(void) :int
+setAge(int) :void
+getweight(void) :double
+setweight(double) :void
+run(void) :void

첫번째 칸에는 클래스의 이름

두번째 칸에는 맴버 변수

세번째 칸에는 맴버 함수를 작성한다

 

클래스 안에서 함수 선언

	#include <iostream>
	class Dog {    
	//private: class의 기본 접근속성이 private이기 때문에 생략이 가능하다.
		int age;
		double weight;
	public://접근속성을 public으로 변경
		int getAge();
		void setAge(int a);
		double getWeight();
		void setWeight(double a);
		void run();
	};


	int main()
	{

		Dog coco;
		coco.setAge(1);//접근속성이 public 이기 때문에 접근이 가능 함수를 호출하여 argument 1 전달
		coco.setWeight(1.5);
		std::cout << coco.getAge() << std::endl<<coco.getWeight()<<std::endl;
		coco.run();

		return 0;
	}

	int Dog::getAge()
	{

		return age;
	}
	void Dog::setAge(int a)//매개변수(parameter) a
	{
		age = a;
	}
	double Dog::getWeight()
	{
		return weight;
	}
	void Dog::setWeight(double a)
	{
		weight = a;
	}
	void Dog::run()
	{
		std::cout << "달린다.................\n";
	}

클래스 밖에서 함수를 정의한 후에 Dog클래스에서 함수를 선언하려면 리턴형 클래스명::멤버함수명(매개변수 리스트)

처럼 Dog::를 함수 이름 앞에 써줘 Dog클래스의 맴버함수인것을 알려줘야 한다.

 

:: 범위 지정 연산자

함수 앞에 사용하면 어느 클래스에 포함되어 있는지

변수 앞에 사용하면 함수 안에서 전역변수에 접근할 때

 

using namespace 전체를 std동네로 지정하는 것

using std::cout은 cout에 한에서 std동네로 지정하는 것

 

기존 함수는 함수로 가서 연산 후 값을 return 해줌

 

클래스 안에 정의하지 않고 외부에서 정의 후 클래스 안에서 선언하면 inline함수가 되지 않는다.

 

속도

inline함수> 함수

실행 파일 크기

inline함수< 함수

 

 

위 블로그 글은 한성현 교수님의 C++5주차 강의를 토대로 작성되었습니다.

 

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

C++ Const, 동적 메모리 할당  (0) 2023.11.09
C++ 클래스와 생성자, 소멸자  (0) 2023.11.02
c++ 구조체, 클래스  (0) 2023.10.12
C++ 함수, 구조체  (0) 2023.10.05
C++프로그래밍 3주차  (0) 2023.09.21