2012-03-30 2 views

답변

5
는 VEC에서 const를 기준으로 파라미터를 변경

:

virtual void Add(Vec const &vector) = 0; 

Vec로부터 유도 된 클래스 (공개) 기본 클래스에 참조에 의해 전달 될 수있다.

또한, Vec을 기본 클래스로 사용하려고 계획 했으므로 아마 dtor도 가상으로 만들고 싶을 것입니다. 그렇지 않으면 포인터 나베이스에 대한 참조를 통해 파생 된 유형의 객체를 파괴하려고하면 정의되지 않은 동작이 발생합니다.

+0

"오류 C2503 : 'Vec': 기본 클래스에 크기가 0 인 배열을 포함 할 수 없습니다."이유가 무엇입니까? (이것은 내가 상속받은 후에) – NBcode

+0

@NBcode :'dim'의 크기를 지정해야합니다 :'double dim [10];'크기를 알지 못한다면 만약 그렇다면)'std :: vector dim;을 사용하는 것이 좋습니다. –

+0

Vec로부터 상속받은 Vec3 클래스를 만들었습니다. 재정의 Add() 메서드의 매개 변수를 강제로 "Vec3"으로 설정할 수 있습니까? – NBcode

2

사용 CONST의 VEC를 참조, 또는 VEC에 대한 포인터

class Vec 
{ 
    double dim[]; 
public: 
    virtual void Add(const Vec& vector) = 0; 
}; 
2

예, 당신은 포인터 또는 Vec에 대한 참조를 통과하십시오 class에 대한 포인터에서

class Vec 
{ 
    double dim[]; 
public: 
    Vec(void); 
    ~Vec(void); 
    virtual void Add(Vec* vector) = 0; 

}; 

변환을 그 Vec에서 Vec*으로 파생됩니다.

값으로 전달하면 개체 조각화가 발생하여 예상대로 동작하지 않습니다.

관련 문제