C 언어
C++에서 다형성은 멤버 함수를 호출/호출하는 객체에 따라 다르게 동작하도록 합니다. 다형성(Polymorphism)은 여러 형태를 갖는다는 의미의 그리스어입니다. 상속을 통해 관련된 클래스 계층이 있을 때 발생합니다.
예를 들어 makeSound() 함수가 있다고 가정합니다. 고양이가 이 함수를 호출하면 야옹 소리가 납니다. 젖소가 동일한 기능을 호출하면 야옹 소리가 납니다.
우리는 하나의 기능을 가지고 있지만 상황에 따라 다르게 작동합니다. 함수에는 여러 가지 형태가 있습니다. 따라서 우리는 다형성을 달성했습니다.
이 C++ 자습서에서는 다음을 배우게 됩니다.
C++는 두 가지 유형의 다형성을 지원합니다.
인수의 수와 유형을 일치시켜 오버로드된 함수를 호출합니다. 정보는 컴파일 타임에 존재합니다. 이것은 C++ 컴파일러가 컴파일 타임에 올바른 함수를 선택한다는 것을 의미합니다.
컴파일 타임 다형성은 함수 오버로딩과 연산자 오버로딩을 통해 달성됩니다.
함수 오버로딩은 이름은 비슷하지만 인수가 다른 많은 함수가 있을 때 발생합니다. 인수는 수 또는 유형에 따라 다를 수 있습니다.
예시 1:
#include <iostream>
using namespace std;
void test(int i) {
cout << " The int is " << i << endl;
}
void test(double f) {
cout << " The float is " << f << endl;
}
void test(char const *ch) {
cout << " The char* is " << ch << endl;
}
int main() {
test(5);
test(5.5);
test("five");
return 0;
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
이름은 같지만 인수 유형이 다른 세 가지 함수가 있습니다. 우리는 다형성을 달성했습니다.
연산자 오버로딩에서 우리는 C++ 연산자에 대한 새로운 의미를 정의합니다. 또한 운영자가 작동하는 방식도 변경합니다. 예를 들어 + 연산자를 정의하여 두 문자열을 연결할 수 있습니다. 숫자 값을 더하기 위한 더하기 연산자로 알고 있습니다. 정의 후에 정수 사이에 배치되면 정수를 추가합니다. 문자열 사이에 배치하면 문자열을 연결합니다.
예시 2:
#include<iostream>
using namespace std;
class ComplexNum {
private:
int real, over;
public:
ComplexNum(int rl = 0, int ov = 0) {
real = rl;
over = ov;
}
ComplexNum operator + (ComplexNum const &obj) {
ComplexNum result;
result.real = real + obj.real;
result.over = over + obj.over;
return result;
}
void print() {
cout << real << " + i" << over << endl;
}
};
int main()
{
ComplexNum c1(10, 2), c2(3, 7);
ComplexNum c3 = c1+c2;
c3.print();
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
이것은 컴파일 시간이 아닌 런타임 중에 개체의 메서드가 호출/호출될 때 발생합니다. 런타임 다형성은 함수 재정의를 통해 달성됩니다. 호출/호출할 함수는 런타임 중에 설정됩니다.
기본 클래스의 함수에 파생 클래스의 새 정의가 제공되면 함수 재정의가 발생합니다. 그 당시 우리는 기본 기능이 재정의되었다고 말할 수 있습니다.
예:
#include <iostream>
using namespace std;
class Mammal {
public:
void eat() {
cout << "Mammals eat...";
}
};
class Cow: public Mammal {
public:
void eat() {
cout << "Cows eat grass...";
}
};
int main(void) {
Cow c = Cow();
c.eat();
return 0;
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
가상 함수는 C++에서 런타임 다형성을 구현하는 또 다른 방법입니다. 기본 클래스에서 정의되고 파생 클래스에서 재정의된 특수 함수입니다. 가상 함수를 선언하려면 virtual 키워드를 사용해야 합니다. 키워드는 기본 클래스에서 함수 선언보다 먼저 와야 합니다.
가상 기능 클래스가 상속되면 가상 클래스는 필요에 맞게 가상 기능을 재정의합니다. 예:
#include <iostream>
using namespace std;
class ClassA {
public:
virtual void show() {
cout << "The show() function in base class invoked..." << endl;
}
};
class ClassB :public ClassA {
public:
void show() {
cout << "The show() function in derived class invoked...";
}
};
int main() {
ClassA* a;
ClassB b;
a = &b;
a->show();
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
다음은 이 둘의 주요 차이점입니다.
C 언어
C#의 인터페이스란 무엇입니까? 인터페이스 C#에서 클래스와 함께 사용되어 클래스가 애플리케이션에 제공할 내용에 대한 계약인 계약을 정의합니다. 인터페이스는 클래스가 수행할 수 있는 작업을 정의합니다. 인터페이스는 속성과 메서드를 선언합니다. 메서드가 수행할 작업을 정확히 정의하는 것은 클래스에 달려 있습니다. 콘솔 애플리케이션에서 클래스를 변경하여 인터페이스의 예를 살펴보겠습니다. 인터페이스를 사용하여 실행할 수 있는 것이 없기 때문에 코드를 실행하지 않습니다. C# 인터페이스 예 인터페이스 클래스를 만들어 봅시다. 클래스
C에서 malloc이란 무엇입니까? malloc() 함수는 메모리 할당을 나타냅니다. 메모리 블록을 동적으로 할당하는 데 사용되는 함수입니다. 지정된 크기의 메모리 공간을 예약하고 메모리 위치를 가리키는 널 포인터를 반환합니다. 반환된 포인터는 일반적으로 void 유형입니다. 그것은 우리가 모든 포인터에 malloc 함수를 할당할 수 있다는 것을 의미합니다. 구문 ptr = (cast_type *) malloc (byte_size); 여기, ptr은 cast_type의 포인터입니다. malloc 함수는 할당된 byte_s