class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec vector) = 0;
};
Vec
에서 Vec::Add()
의 Vec
을 (를) 상속하는 모든 클래스로 바꾸고 싶습니다. 그럴 수있는 방법이 있습니까?C++ : 다른 클래스로부터 상속받은 일반화 된 클래스를 지정하는 방법이 있습니까?
class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec vector) = 0;
};
Vec
에서 Vec::Add()
의 Vec
을 (를) 상속하는 모든 클래스로 바꾸고 싶습니다. 그럴 수있는 방법이 있습니까?C++ : 다른 클래스로부터 상속받은 일반화 된 클래스를 지정하는 방법이 있습니까?
:
는virtual void Add(Vec const &vector) = 0;
Vec
로부터 유도 된 클래스 (공개) 기본 클래스에 참조에 의해 전달 될 수있다.
또한, Vec
을 기본 클래스로 사용하려고 계획 했으므로 아마 dtor도 가상으로 만들고 싶을 것입니다. 그렇지 않으면 포인터 나베이스에 대한 참조를 통해 파생 된 유형의 객체를 파괴하려고하면 정의되지 않은 동작이 발생합니다.
사용 CONST의 VEC를 참조, 또는 VEC에 대한 포인터
class Vec
{
double dim[];
public:
virtual void Add(const Vec& vector) = 0;
};
예, 당신은 포인터 또는 Vec
에 대한 참조를 통과하십시오 class
에 대한 포인터에서
class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec* vector) = 0;
};
변환을 그 Vec
에서 Vec*
으로 파생됩니다.
값으로 전달하면 개체 조각화가 발생하여 예상대로 동작하지 않습니다.
"오류 C2503 : 'Vec': 기본 클래스에 크기가 0 인 배열을 포함 할 수 없습니다."이유가 무엇입니까? (이것은 내가 상속받은 후에) – NBcode
@NBcode :'dim'의 크기를 지정해야합니다 :'double dim [10];'크기를 알지 못한다면 만약 그렇다면)'std :: vector dim;을 사용하는 것이 좋습니다. –
Vec로부터 상속받은 Vec3 클래스를 만들었습니다. 재정의 Add() 메서드의 매개 변수를 강제로 "Vec3"으로 설정할 수 있습니까? – NBcode