먼저,이 질문에 대답하기 위해, 우리는 monomorphic
정말 무엇을 의미하는지 조사 할 필요가 : 클래스 우우의 맥락에서
. 이를 위해,의 단어 분해하자 : 우리가 가정하면, 그래서
mono - morphic
을 그 모노 = 하나 및 형태 적 = 변형 가능한 (적어도이 - 예를 들어, 사전 의미를 나를 이상 죽이지 마세요)
그래서, 우리는 많은 것을 의미하는이 걸릴 수 있습니다, 여기 내 머리 위로 떨어져 몇 가지 :
우리의 클래스는 한 번만 변경할 수 있습니다
- 아니면이 다형성에 반대
- 마지막으로 (가 서브 클래스 될 수 없음을 의미)로 사용될 수, 그것은 수학의 속성을 참조 할 수 : 그래서 http://en.wikipedia.org/wiki/Monomorphism
을, 그 대답 3가 아니라고 가정 우리가 찾고있는 것 (어떤 경우에는 그 기사가 혼란 스럽기 때문에 더 나은 답을 찾아야합니다), 하나와 둘을 밟아 봅시다.
1. 우리의 클래스는이 가능성이 가장 높은 의미입니다, 제 생각에는 한 번
변경 될 수 있습니다. 첫눈에, 당신의 객체는 monomorphic입니다. 이것은 생성자 (지정된 생성자 또는 내장 된 복사 생성자)를 통해서만 한 번만 변경할 수 있다는 것을 의미합니다.
메모리가 읽기 - 쓰기 인 모든 컴퓨터에서 원하는 경우/할 수있는 거의 항상 수동으로 비트를 메모리에 설정하는 방법이 있기 때문에 이것은 사실 일 수 없습니다.
그러나, 당신이 제공하는 인터페이스를 사용하여, 그 시나리오에서 금지하고 예, 당신의 클래스는 단지 생성자를 통해 설정 한 회원 (m
)의 점에서 단형입니다.
2. 우리의 클래스는
이것에 대한 대답은 조금 복잡 다형성이 아니다. 대부분의 언어와 달리 C++에는 두 가지 형태의 다형성이 있습니다. 전통적인 OO 의미에서 서브 클래스에 의해 덮어 쓰여지는 함수를 생성하는 기능을 가지고 있는데, 이는 virtual
으로 표시됩니다. 그러나 이것을하지는 마십시오. 따라서 OO 다형성은 여러분의 클래스에서 가능하지 않습니다.
그러나 이전에 말한 것처럼 C++에는 여러 유형의 다형성이 있습니다.두 번째 유형은 (주로 반복자의 경우) STL 전반에 걸쳐 사용되는 template polymorphism
또는 function polymorphism
,라고, 그것은 조금 다음과 같이 작동합니다 :
완벽하게 유효한 인터페이스입니다
template<typename aImpl>
void printA(const aImpl &a)
{
a.print();
}
class A {
public:
void print() { puts("I'm in A!"); }
};
, 그것은으로 작동합니다 예상했다. 분명히 다른 값을 출력 할
class B {
public:
void print() { puts("I'm in B!"); }
};
그러나, 함수에 배치되는 다음 클래스를 방지하기 위해 아무것도 없다.
결국 C++는 복잡한 언어이므로 클래스가 다형성이 될 수 없도록하려면 모든 멤버와 함수를 비공개로 설정해야합니다. 그러면 첫 번째 클래스에 개체가있는 목적을 무효화 할 수 있습니다. 장소.
어떻게 하나 단형를 정의 할 것인가? 나는 당신이 대수학의 속성을 언급하고 있다고 생각하지 않는다 : http://en.wikipedia.org/wiki/Monomorphism, 그러나 나는 다른 곳에서 사용 된 용어를 본 적이 없다. –
C++은 Java 또는 PHP와 다릅니다. 생성자는 대개 C++에서 매우 다르게 작성됩니다. –
부와이 시나리오에서 foo와는 어떤 관계가 있습니까? –