내 프로젝트에 몇 가지 문제가 있습니다. 여기에 몇 가지 코드는 다음과 같습니다기본 클래스 및 반환 유형에서 템플릿 상속
class calcDinamica
{
public:
virtual void somma() =0;
virtual void creaPrimo() =0;
virtual T* ritornaPrimo()const{cout<<"errore"<<endl;};//THIS is what i want
virtual ~calcDinamica(){};
};
template<class T>
class calcolatrice:public calcDinamica
{
private:
T* primoVett; //first operand
T* secondoVett; //second operand
T* risultatoVett; //result
public:
calcolatrice():primoVett(0), secondoVett(0), risultatoVett(0){};
virtual void creaPrimo(){primoVett= new T;};
virtual void creaSecondo(){secondoVett= new T;};
virtual void creaRisultato(){};
virtual void somma()
{
risultatoVett=new T;
*risultatoVett=*primoVett+*secondoVett;
};
virtual T* ritornaPrimo()const{cout<<"giusto"<<endl;return primoVett;};
};
이 코드는 계산기를, 내가 다른 3 개 가지 수업을하고, 내가 구현하고 있기 때문에 내가 위의 게시 전용이 클래스는, 내가 세션 중에 생성 된 데이터를 추적 할 이것 QT와.
그래서 저는 calcDinamica * cal과 같은 포인터를 가질 수 있도록이 기본 CalcDinamica를 만들었습니다. QT와 함께 계산기를 사용할 때 벡터 나 행렬과 같이 연산하고자하는 피연산자 유형을 변경할 수 있기 때문에 다음과 같이 작성하십시오 : calc = new calcolatice < 행렬>.
좋아,이 작동하지만 calcDatamica 포인터로 dynamic_cast 많이 수행하지 않고 calcolatrice 안에 데이터를 반환 할 싶어요. 어떻게 만들 수 있습니까, 아니면 불가능합니까? 왜냐하면 불가능하다면 기본 클래스의이 옵션을 남겨두고 더 나은 3 개의 calcolatrice를 생성하는 것이 좋습니다.
미리 감사드립니다.
Thx, 아니요, 이렇게하면 기본 클래스의 목적이 손실되어 쓸모 없게됩니다. 그 순수한 기본 클래스의 유일한 목적은 T 타입이없는 포인터를 선언 할 수 있다는 것입니다 : calcDinamica * test; 그리고 내가 어떤 유형을 사용하는지 알고있을 때, 예를 들어 test = new calcolatrice < matrix >으로 새 항목을 만듭니다. 그럼, 만약 내가 사용 test-> somma(); 그것은 작동하지만, "test"포인터에 dynamic_cast를 수행하지 않고 데이터를 검색하는 방법을 찾을 수 없습니다. somma()와 비슷한 방법을 사용하여 calcolatrice의 개인 데이터를 다시 제공 할 수있는 방법을 찾고 싶습니다. – user1446020
오케이, 알아. Try 'class calcDinamica { public : 가상 공백 somma() = 0; 가상 공극 creaPrimo() = 0; 템플릿 가상 T * ritornaPrimo() const {cout << "errore"<< endl;}; //이게 내가 원하는 것이다 virtual ~ calcDinamica() {}; }; –
CodeSun
나는 그것을 슬프게 이미 시도했다 : 오류 : 템플릿이 '가상'이 아닐 수도있다. :( – user1446020