2012-10-09 26 views
5
#include <iostream> 
#include <cmath> 
using namespace std; 
class Tcirculo{ 
     float radio; 
     float diametro; 
     float area; 
public: 
     void carea(float r){radio= r; area=(M_PI*((r*r)));} 
     float cdiam(float r) {diametro = 2*r; return diametro;} 
     float getr(){return radio;} 
     float getd(){return diametro;} 
     float geta(){return area;} 

}; 


class Trectangulo : public Tcirculo{ 
     float altura; 
public: 
     float calca(float h, float r){altura =h; 
     float arearec = getd() * h; return arearec;} 
}; 

class Tcilindro : public Tcirculo ,Trectangulo{ 
     float xx,bb; 
public: 
     Tcilindro(float a, float b) {xx=a;bb=b;} 
     float area_total(); 
}; 

float Tcilindro::area_total(){ 
     int area; 
     area = ((2*((getd())))+calca(bb,xx)); 
     return area; 
} 
int main(int argc, char *argv[]) { 

     return 0; 
} 

ama sorun: üye işleviBelirsiz sınıf kalıtım

warning: direct base 'Tcirculo' inaccessible in 'Tcilindro' due to ambiguity 

'float Tcilindro::area_total()':

Tcirculo den Tcilindro türetmek için gerek yoktur
error: reference to 'geta' is ambiguous 
error: candidates are: float Tcirculo::geta() 
error:     float Tcirculo::geta() 
error: reference to 'geta' is ambiguous 
error: candidates are: float Tcirculo::geta() 
error:     float Tcirculo::geta() 

cevap

2

, onu türetmek eğer yeterlidir Trectangulo.

+0

Evet, bu durumda tasarımınızı kontrol etmeniz gerektiğini düşünüyorum. –

1

Aynı Temel Sınıf ile çok sayıda devralma nedeniyle bu sorunlar. Örnekve Tcirculo'dan gelen Tcilindro örnek sınıfında, Tcirculo ve Tcilindro'dan türetilmiş Trectangulo, aynı işlevlerin çift tanımına sahiptir. Devralınan işlevlerin belirsizliğini kaldırmak için Tcirculo sınıfını atlamanız yeterlidir.