산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

예제를 사용한 C++ 연산자 오버로딩

연산자 오버로딩이란 무엇입니까?

연산자 오버로딩 사용 C++에서는 하나의 범위에서 연산자에 대해 둘 이상의 의미를 지정할 수 있습니다. 연산자 오버로딩의 목적은 사용자 정의 데이터 유형에 대한 연산자의 특별한 의미를 제공하는 것입니다.

연산자 오버로딩의 도움으로 대부분의 C++ 연산자를 재정의할 수 있습니다. 연산자 오버로딩을 사용하여 하나의 연산자를 사용하여 다른 작업을 수행할 수도 있습니다.

이 C++ 자습서에서는 다음을 배우게 됩니다.

구문

C++ 연산자를 오버로드하려면 다음과 같이 클래스 내부에 특수 함수를 정의해야 합니다.

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

다음은 위의 구문에 대한 설명입니다.

예시 1:

#include <iostream>
using namespace std;
class TestClass {
private:
	int count;
public:
	TestClass() : count(5) {}
	void operator --() {
		count = count - 3;
	}
	void Display() { 

		cout << "Count: " << count; }
};

int main() {
	TestClass tc;
	--tc;
	tc.Display();
	return 0;
}

출력:

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

코드 설명:

  1. 해당 기능을 사용하기 위해 코드에 iostream 헤더 파일을 포함합니다.
  2. 호출 없이 클래스를 사용하려면 프로그램에 std 네임스페이스를 포함합니다.
  3. TestClass라는 클래스를 만듭니다.
  4. 클래스 구성원을 비공개로 액세스할 수 있는 것으로 표시하는 비공개 액세스 한정자를 사용합니다.
  5. 정수 변수 개수를 만듭니다. 이 변수는 비공개로 액세스할 수 있습니다.
  6. 클래스 구성원을 비공개로 액세스할 수 있는 것으로 표시하는 공개 액세스 한정자를 사용합니다.
  7. 클래스 생성자를 사용하여 변수 카운터를 5로 초기화합니다.
  8. - 연산자의 의미를 오버로드합니다.
  9. 연산자는 변수 x의 값을 1만큼 감소시킵니다.
  10. 연산자 오버로딩 섹션의 끝. 운영자에게 새 이름이 지정되었습니다.
  11. Display() 함수라는 이름의 함수 정의.
  12. Display() 함수가 호출될 때 콘솔의 다른 텍스트와 함께 변수 개수 값을 인쇄합니다. }는 Display() 함수 본문의 끝을 표시합니다.
  13. 클래스 본문 끝.
  14. main() 함수를 호출합니다. 이 함수 안에 프로그램 로직을 추가해야 합니다.
  15. TestClass 클래스의 인스턴스를 만들고 이름을 tc로 지정합니다.
  16. 이는 void 연산자 –() 함수를 호출합니다.
  17. TestClass 클래스의 자세를 사용하여 Display() 함수를 호출합니다.
  18. 함수는 성공적으로 완료되면 값을 반환해야 합니다.
  19. main() 함수 본문의 끝.

C++의 연산자 오버로딩에 대한 다양한 접근 방식

다음 유형의 함수를 구현하여 연산자 오버로딩을 수행할 수 있습니다.

  1. 회원 기능
  2. 비회원 기능
  3. 친구 기능

private 및 protected 클래스 멤버에 액세스해야 하는 경우 연산자 오버로딩 함수를 friend 함수로 만들 수 있습니다.

모든 C++ 연산자를 오버로드할 수 있습니까?

아니요. 오버로드할 수 없는 C++ 연산자가 있습니다.

여기에는 다음이 포함됩니다.

기억해야 할 사항:

  1. 연산자 오버로딩을 사용하면 연산자가 사용자 정의 유형(객체, 구조)에 대해서만 작동하는 방식을 재정의할 수 있습니다. 내장형(float, char, int 등)에는 사용할 수 없습니다.
  2. =및 &C++ 연산자는 기본적으로 오버로드됩니다. 예를 들어 =연산자를 사용하여 동일한 클래스의 개체를 직접 복사할 수 있습니다.
  3. 연산자 우선 순위는 연산자의 우선 순위와 연관을 변경하지 않습니다. 그러나 괄호를 사용하여 평가 순서를 변경할 수 있습니다.
  4. C++에서 오버로드할 수 없는 네 가지 연산자가 있습니다. 여기에는 범위 확인 연산자(::), 멤버 선택 연산자(.), 함수 포인터를 통한 멤버 선택 연산자(.*), 삼항 연산자(?:)가 포함됩니다.

연산자 오버로딩 규칙:

연산자 오버로딩에 대한 규칙은 다음과 같습니다.

연산자를 오버로드하는 방법:

예시 1:

#include <iostream>   
using namespace std;
class OperatorOverload {
private:
	int x;

public:
	OperatorOverload() : x(10) {}
	void operator ++() {
		x = x + 2;
	}
	void Print() {
		cout << "The Count is: " << x;
		}
};
int main() {
	OperatorOverload ov;
	++ov;   
	ov.Print();
	return 0;
}

출력:

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

코드 설명:

  1. 해당 기능을 사용하기 위해 코드에 iostream 헤더 파일을 포함합니다.
  2. 호출 없이 클래스를 사용하려면 프로그램에 std 네임스페이스를 포함합니다.
  3. OperatorOverload라는 클래스를 만듭니다.
  4. 클래스 구성원을 비공개로 액세스할 수 있는 것으로 표시하는 비공개 액세스 한정자를 사용합니다.
  5. 정수 변수 x를 만듭니다. 이 변수는 비공개로 액세스할 수 있습니다.
  6. 클래스 구성원을 비공개로 액세스할 수 있는 것으로 표시하는 공개 액세스 한정자를 사용합니다.
  7. 클래스 생성자를 사용하여 변수 x를 10으로 초기화합니다.
  8. ++ 연산자의 의미를 오버로드합니다.
  9. 연산자는 변수 x의 값을 2로 증가시킵니다.
  10. 연산자 오버로딩 섹션의 끝. 운영자에게 새 이름이 지정되었습니다.
  11. Print() 함수 호출.
  12. Print() 함수가 호출될 때 콘솔의 다른 텍스트와 함께 변수 x의 값을 인쇄합니다.
  13. Print() 함수 본문의 끝.
  14. 클래스 본문 끝.
  15. main() 함수를 호출합니다. 이 함수 안에 프로그램 로직을 추가해야 합니다.
  16. ov라는 OperatorOverload 클래스의 인스턴스를 만듭니다.
  17. 이는 void 연산자 ++() 함수를 호출합니다.
  18. OperatorOverload 클래스의 자세를 사용하여 Print() 함수를 호출합니다.
  19. 함수는 성공적으로 완료되면 값을 반환해야 합니다.
  20. main() 함수 본문의 끝.

예시 2:

#include<iostream> 
using namespace std;

class TestClass {
private:
	int real, over;
public:
	TestClass(int rl = 0, int ov = 0) {
		real = rl;
		over = ov;
	}

	TestClass operator + (TestClass const &obj) {
		TestClass result;
		result.real = real + obj.real;
		result.over = over + obj.over;
		return result;
	}
	void print() {
		cout << real << " + i" << over << endl;
	}
};
int main()
{
	TestClass c1(9, 5), c2(4, 3);
	TestClass c3 = c1 + c2;
	c3.print();
}

출력:

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

코드 설명:

  1. iostream 헤더 파일을 프로그램에 포함하여 기능을 사용합니다.
  2. 호출하지 않고 클래스를 사용하려면 std 네임스페이스를 프로그램에 포함합니다.
  3. TestClass라는 클래스를 만듭니다. {는 클래스 본문의 시작을 표시합니다.
  4. 비공개 액세스 수정자를 사용하여 변수를 비공개로 표시합니다. 즉, 클래스 내에서만 액세스할 수 있습니다.
  5. 실수와 그 이상의 정수 변수 2개를 정의합니다.
  6. 공개 액세스 한정자를 사용하여 생성자를 공개로 표시합니다. 즉, 클래스 외부에서도 액세스할 수 있습니다.
  7. 클래스 생성자 생성 및 변수 초기화.
  8. 변수 실수의 값을 초기화합니다.
  9. 변수의 값을 초기화합니다.
  10. 생성자 본문의 끝.
  11. + 연산자의 의미를 재정의합니다.
  12. TestClass 유형의 데이터 유형 결과를 생성합니다.
  13. 복소수에는 + 연산자를 사용합니다. 이 줄은 숫자의 실수 부분을 다른 숫자의 실수 부분에 더합니다.
  14. 복소수에는 + 연산자를 사용합니다. 이 줄은 숫자의 허수 부분을 다른 숫자의 허수 부분에 추가합니다.
  15. 프로그램은 성공적으로 실행되면 변수 결과 값을 반환합니다.
  16. + 연산자의 새로운 의미, 즉 오버로딩 정의 끝
  17. print() 메서드를 호출합니다.
  18. 콘솔에 추가 후 새로운 복소수를 인쇄합니다.
  19. print() 함수 본문의 끝.
  20. TestClass 클래스 본문 끝.
  21. main() 함수 호출.
  22. 추가할 실수 부분과 복소수 부분의 값을 모두 전달합니다. c1의 첫 번째 부분은 c2의 첫 번째 부분, 즉 9+4에 추가됩니다. c1의 두 번째 부분은 c의 두 번째 부분, 즉 5+3에 추가됩니다.
  23. 오버로드된 + 연산자를 사용하여 연산을 수행하고 결과를 변수 c3에 저장합니다.
  24. 콘솔에 변수 c3의 값을 출력합니다.
  25. main() 함수 본문의 끝.

요약:


C 언어

  1. C++ 프로그래밍에서 함수에 배열 전달
  2. 파이썬 연산자 오버로딩
  3. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  4. C++ do… while 루프 예제
  5. 예제가 있는 C++ 포인터
  6. C++ Char 데이터 유형(예제 포함)
  7. 예제가 있는 C++ 구조체
  8. 예제가 있는 C++의 std::list
  9. 프로그램 예제가 있는 C++ 함수
  10. 예제가 있는 Python Lambda 함수