C++ 클래스 및 객체(예제 포함)

수업이란 무엇입니까?

C++ 클래스는 데이터와 데이터를 조작하는 메서드를 하나로 결합합니다. 클래스는 객체의 형태도 결정합니다. 클래스에 포함된 데이터와 메서드를 클래스 멤버라고 합니다. 클래스는 사용자 정의 데이터 유형입니다. 클래스 멤버에 액세스하기 위해 클래스의 인스턴스를 사용합니다. 클래스를 객체에 대한 청사진으로 볼 수 있습니다.

클래스는 집의 프로토타입이 됩니다. 문의 위치와 크기를 보여주며, windows, 바닥 등 이러한 설명을 바탕으로 집을 지을 수 있습니다. 집이 물건이 됩니다. 프로토타입으로 여러 집을 만드는 것이 가능합니다. 또한, 하나의 클래스에서 많은 객체를 생성하는 것도 가능합니다.

C++ 클래스

위 그림에는 단일 주택 프로토타입이 있습니다. 이 프로토타입을 통해 우리는 서로 다른 특징을 지닌 두 개의 주택을 만들었습니다.

클래스 선언

C+에서는 class 키워드를 사용하여 클래스를 정의합니다. 이 뒤에는 클래스 이름이 와야 합니다. 그런 다음 클래스 본문이 중괄호 { } 사이에 추가됩니다.

통사론

class class-name
   {
   // data
   // functions
   };
  • class-name은 클래스에 할당할 이름입니다.
  • 데이터는 일반적으로 변수로 선언되는 클래스의 데이터입니다.
  • 함수는 클래스 함수입니다.

비공개 및 공개 키워드

아마 이 두 가지 키워드를 접하셨을 겁니다. 이는 액세스 수정자입니다.

  • 은밀한:

private 키워드를 사용하여 함수나 클래스를 정의하면 비공개가 됩니다. 이는 클래스 내에서만 액세스할 수 있습니다.

  • 공공의:

반면에 public 키워드는 데이터/함수를 공개적으로 만듭니다. 클래스 외부에서 접근이 가능합니다.

개체 정의

객체는 클래스에서 생성됩니다. 클래스 객체는 변수 선언과 비슷한 방식으로 선언됩니다. 클래스 이름으로 시작해야 하며 그 뒤에 개체 이름이 와야 합니다. 클래스 유형의 객체입니다.

통사론

class-name object-name;
  • class-name은 객체가 생성될 클래스의 이름입니다.
  • object-name은 새 개체에 할당될 이름입니다.

클래스에서 객체를 생성하는 이러한 프로세스를 인스턴스화라고 합니다.

데이터 멤버에 접근하기

클래스의 공개 멤버에 액세스하려면 (.)점 연산자를 사용합니다. 이는 공개 액세스 한정자로 표시된 멤버입니다.

예제 1

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

출력:

데이터 멤버에 접근하기

다음은 코드의 스크린샷입니다.

데이터 멤버에 접근하기

코드 설명:

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하십시오.
  2. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함합니다.
  3. Phone이라는 클래스를 선언합니다.
  4. 공개 액세스 수정자를 사용하여 생성하려는 변수를 공개적으로 액세스할 수 있도록 표시합니다.
  5. 가변비용을 선언하라. double 데이터 형식.
  6. Slot이라는 정수 변수를 선언합니다.
  7. 수업 본문이 끝납니다.
  8. main() 함수를 호출합니다. 프로그램 논리는 해당 본문 내에 추가되어야 합니다.
  9. Phone 유형의 Y6이라는 개체를 만듭니다. 이것을 인스턴스화라고 합니다.
  10. Phone 유형의 Y7이라는 개체를 만듭니다. 이것을 인스턴스화라고 합니다.
  11. 개체 Y6을 사용하여 Phone 클래스의 변수/멤버 비용에 액세스합니다. 값은 100.0으로 설정됩니다. 이제 Y6의 비용은 100.0으로 설정되었습니다.
  12. 개체 Y6을 사용하여 Phone 클래스의 변수/멤버 슬롯에 액세스합니다. 값은 2로 설정됩니다. 이제 Y6의 슬롯은 2로 설정됩니다.
  13. 개체 Y7을 사용하여 Phone 클래스의 변수/멤버 비용에 액세스합니다. 값은 200.0으로 설정됩니다. 이제 Y7의 비용은 200.0으로 설정되었습니다.
  14. 개체 Y7을 사용하여 Phone 클래스의 변수/멤버 슬롯에 액세스합니다. 값은 2로 설정됩니다. 이제 Y7의 슬롯은 2로 설정됩니다.
  15. 다른 텍스트와 함께 콘솔에 Y6의 비용을 인쇄합니다.
  16. 다른 텍스트와 함께 콘솔에 Y7의 비용을 인쇄합니다.
  17. 다른 텍스트와 함께 Y6의 슬롯 수를 인쇄합니다.
  18. 다른 텍스트와 함께 Y7의 슬롯 수를 인쇄합니다.
  19. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  20. main() 함수 본문의 끝입니다.

프라이빗 클래스란 무엇인가요?

비공개로 표시된 클래스 멤버는 클래스 내에 정의된 함수를 통해서만 액세스할 수 있습니다. 클래스 외부에 정의된 개체나 함수는 이러한 멤버에 직접 액세스할 수 없습니다. 비공개 클래스 멤버는 멤버 및 친구 함수를 통해서만 액세스됩니다.

보호 클래스란 무엇입니까?

보호됨으로 표시된 클래스 구성원은 비공개로 표시된 클래스 구성원보다 유리합니다. 해당 정의 클래스 내의 함수를 통해 액세스할 수 있습니다. 또한 파생 클래스에서도 액세스할 수 있습니다.

예제 2

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

출력:

데이터 멤버에 접근하기

다음은 코드의 스크린샷입니다.

데이터 멤버에 접근하기

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
  2. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  3. ClassA라는 클래스를 만듭니다.
  4. public 액세스 한정자를 사용하여 생성할 클래스 멤버를 공개적으로 액세스할 수 있도록 표시합니다.
  5. 하나의 정수 값 val을 취하는 set_a()라는 함수를 만듭니다.
  6. get_a()라는 함수를 만듭니다.
  7. 생성될 클래스 멤버를 비공개적으로 액세스할 수 있도록 표시하려면 비공개 액세스 한정자를 사용하세요.
  8. a라는 정수 변수를 선언합니다.
  9. 수업 본문이 끝납니다.
  10. 클래스 이름과 범위 확인 연산자를 사용하여 get_a() 함수에 액세스합니다. 우리는 함수가 호출될 때 무엇을 하는지 정의하고 싶습니다.
  11. get_a() 함수는 호출될 때 변수 a의 값을 반환해야 합니다.
  12. get_a() 함수 정의가 끝납니다.
  13. 클래스 이름과 범위 확인 연산자를 사용하여 set_a() 함수에 액세스합니다. 우리는 함수가 호출될 때 무엇을 하는지 정의하고 싶습니다.
  14. 변수 val의 값을 변수 a에 할당합니다.
  15. set_a() 함수 정의가 끝납니다.
  16. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
  17. ClassA의 인스턴스를 만들고 이름을 a로 지정합니다.
  18. 위의 클래스 인스턴스와 set_a() 함수를 사용하여 변수 a에 값 20을 할당합니다.
  19. 콘솔에서 변수 a의 값과 함께 일부 텍스트를 인쇄합니다. 변수 a의 값은 get_a() 함수를 호출하여 얻습니다.
  20. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  21. main() 함수 본문의 끝입니다.

예제 3

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

출력:

데이터 멤버에 접근하기

다음은 코드의 스크린샷입니다.

데이터 멤버에 접근하기

코드 설명 :

  1. 해당 기능을 사용하려면 코드에 iostream 헤더 파일을 포함하세요.
  2. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  3. ParentClass라는 클래스를 만듭니다.
  4. protected 액세스 한정자를 사용하여 생성할 클래스 멤버를 보호됨으로 표시합니다.
  5. value라는 이름의 정수 변수를 만듭니다.
  6. 수업 본문이 끝납니다.
  7. ParentClass를 상속하는 ChildClass라는 새 클래스를 만듭니다.
  8. protected 액세스 한정자를 사용하여 생성할 클래스 멤버를 하위 클래스에서 액세스할 수 있도록 표시합니다.
  9. 하나의 정수 값 x를 취하는 setId()라는 함수를 만듭니다.
  10. 변수 x의 값을 변수 값에 할당합니다.
  11. setId() 함수 정의가 끝납니다.
  12. displayValue()라는 함수를 만듭니다.
  13. 다른 텍스트와 함께 콘솔에 value라는 변수의 값을 인쇄합니다.
  14. displayValue() 함수 본문의 끝입니다.
  15. ChildClass라는 클래스 본문의 끝입니다.
  16. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
  17. ChildClass의 인스턴스를 생성하고 이름을 지정합니다. c.
  18. 위의 클래스 인스턴스와 setId() 함수를 사용하여 변수 x에 값 21을 할당합니다.
  19. 위 클래스 인스턴스를 사용하여 displayValue()라는 함수를 호출합니다.
  20. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  21. main() 함수 본문의 끝입니다.

클래스 멤버 기능

함수는 데이터를 조작하는 데 도움이 됩니다. 클래스 멤버 함수는 두 가지 방법으로 정의할 수 있습니다.

  • 클래스 정의 내부
  • 클래스 정의 외부

클래스 정의 외부에서 함수를 정의하려면 범위 확인 연산자(::)를 사용해야 합니다. 여기에는 클래스 및 함수 이름이 동반되어야 합니다.

예제 2

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

출력:

클래스 멤버 기능

다음은 코드의 스크린샷입니다.

클래스 멤버 기능

코드 설명 :

  1. 해당 기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함하십시오.
  2. 해당 기능을 사용하려면 프로그램에 문자열 헤더 파일을 포함하십시오.
  3. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  4. Guru99라는 클래스를 만듭니다.
  5. 공개 액세스 한정자를 사용하여 생성하려는 클래스 멤버를 공개적으로 액세스할 수 있도록 표시합니다.
  6. tutorial_name이라는 문자열 변수를 만듭니다.
  7. id라는 정수 변수를 만듭니다.
  8. printname()이라는 함수를 만듭니다. 이 함수는 클래스 정의 내에 정의되어 있지 않습니다.
  9. Printed()이라는 함수를 만듭니다. 이 함수는 클래스 정의 내에 정의됩니다. 해당 본문이 클래스 정의 내에 추가되었습니다.
  10. 콘솔의 다른 텍스트와 함께 변수 id의 값을 인쇄합니다. 이는 printid() 함수 본문 내에 추가되었습니다. printid() 함수가 호출될 때만 실행됩니다.
  11. printid() 함수 본문의 끝입니다.
  12. Guru99 클래스의 본체의 끝입니다.
  13. printname() 함수 정의의 시작입니다.
  14. 다른 텍스트와 함께 콘솔에 tutorial_name 변수의 값을 인쇄합니다. 이는 printname() 함수 본문에 추가되었습니다. printname() 함수가 호출될 때만 실행됩니다.
  15. printname() 함수 정의가 끝납니다.
  16. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
  17. Guru99 클래스의 인스턴스를 만들고 이름을 guru99로 지정합니다.
  18. 위의 인스턴스를 사용하여 tutorial_name 변수에 C++ 값을 할당합니다.
  19. guru99 인스턴스를 사용하여 변수 id에 값 1001을 할당합니다.
  20. guru99 인스턴스를 사용하여 printname() 함수를 호출합니다.
  21. end(end line) 명령을 호출하여 콘솔에 새로운 빈 줄을 인쇄합니다.
  22. 인스턴스 guru99를 사용하여 printid() 함수를 호출합니다.
  23. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  24. main() 함수 본문의 끝입니다.

생성자와 소멸자

생성자란 무엇입니까?

구문은 객체를 초기화하는 특수 함수입니다. 그만큼 C++ 컴파일러 객체를 생성할 때 생성자를 호출합니다. 생성자는 클래스 멤버에 값을 할당하는 데 도움이 됩니다. 물론 이것은 메모리 공간이 할당된 이후의 이야기입니다.

소멸자 란 무엇입니까?

반면에 소멸자는 클래스 객체를 파괴하는 데 도움이 됩니다.

생성자 이름은 클래스 이름과 유사해야 합니다. 생성자에는 반환 유형이 없습니다.

생성자는 클래스 본문 내부 또는 외부에서 정의할 수 있습니다. 클래스 본문 외부에 정의된 경우 클래스 이름과 범위 확인 연산자(::)를 사용하여 정의해야 합니다.

예제 3

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

출력:

생성자와 소멸자

다음은 코드의 스크린샷입니다.

생성자와 소멸자

코드 설명 :

  1. 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
  2. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  3. ClassA라는 클래스를 만듭니다.
  4. 공개 액세스 수정자를 사용하여 생성하려는 멤버를 공개적으로 액세스할 수 있도록 표시합니다.
  5. 클래스의 생성자를 만듭니다.
  6. 생성자가 호출될 때 콘솔에 인쇄할 텍스트입니다. endl은 끝줄을 의미하는 C++ 키워드입니다. 마우스 커서를 다음 줄로 이동시킵니다.
  7. 클래스 생성자의 본문 끝입니다.
  8. 클래스에 대한 소멸자를 만듭니다.
  9. 소멸자가 호출될 때 콘솔에 인쇄할 텍스트입니다. endl은 끝줄을 의미하는 C++ 키워드입니다. 마우스 커서를 다음 줄로 이동시킵니다.
  10. 소멸자 본문의 끝입니다.
  11. 수업 본문이 끝납니다.
  12. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
  13. 클래스 객체를 생성하고 이름을 a로 지정합니다. 생성자가 호출됩니다.
  14. p라는 정수 변수를 만들고 값 1을 할당합니다.
  15. 변수 p를 사용하여 if 문 블록을 만듭니다.
  16. 클래스 객체를 생성하고 이름을 지정합니다. b. 소멸자가 호출됩니다.
  17. if 문의 본문 끝입니다.
  18. main() 함수 본문의 끝입니다.

요약

  • C + + 객체지향적이다.
  • 클래스는 C++를 객체 지향적으로 만드는 주요 기능을 형성합니다.
  • C++ 클래스는 데이터와 데이터를 조작하는 메서드를 하나로 결합합니다.
  • 클래스는 객체의 청사진입니다.
  • 클래스는 객체의 형태를 결정합니다.
  • 클래스에 포함된 데이터와 메서드를 클래스 멤버라고 합니다.
  • 클래스 멤버에 액세스하려면 클래스의 인스턴스를 사용해야 합니다.
  • 클래스를 생성하려면 class 키워드를 사용합니다.
  • 클래스 멤버 함수는 클래스 내부 또는 외부에서 정의할 수 있습니다.