在派生 class 中使用继承的运算符
using inherited operators in derived class
我在派生的 class.
的方法 (menorTamanhoque()) 中使用重载运算符 < 时遇到问题
我这里有基地class:
class CAngulo
{
protected:
int grau, minutos, segundos;
public:
CAngulo(void);
CAngulo(int g,int m, int s);
CAngulo(const CAngulo &p);
bool operator< (const CAngulo &p);
};
CAngulo :: CAngulo(void)
{
grau=10;
minutos=5;
segundos=15;
}
CAngulo :: CAngulo(int g, int m ,int s)
{
grau=g;
minutos=m;
segundos=s;
}
CAngulo :: CAngulo(const CAngulo &p)
{
grau=p.grau;
minutos=p.minutos;
segundos=p.segundos;
}
bool CAngulo :: operator < (const CAngulo &p)
{
if(grau>p.grau)
return(false);
else if(grau<p.grau)
return(true);
else if(grau==p.grau)
{
if(minutos>p.minutos) return(false);
else if(minutos<p.minutos) return(true);
else if(minutos==p.minutos)
{
if(segundos>p.segundos) return(false);
else return(true);
}
}
}
这里我有派生的 class,我想在其中使用上面的重载运算符:
class CSetor : public CAngulo
{
private:
int raio;
public:
CSetor(void);
CSetor(int g,int m, int s, int r);
CSetor(const CSetor &p);
bool menorTamanhoQue(const CSetor &a);
};
CSetor :: CSetor(void)
{
grau=10;
minutos=5;
segundos=15;
raio=10;
}
CSetor :: CSetor(int g, int m ,int s, int r)
{
grau=g;
minutos=m;
segundos=s;
raio=r;
}
CSetor :: CSetor(const CSetor &p)
{
grau=p.grau;
minutos=p.minutos;
segundos=p.segundos;
raio=p.raio;
}
bool CSetor :: menorTamanhoQue(const CSetor &a)
{
}
不知道如何实现最后一个方法 menorTamanhoque
(我必须使用重载 < 来比较 c 和 d 并检查是否 this->raio < a.raio)
这是主要内容,以便你们了解程序的作用:
int main()
{
CAngulo a(10,10,10);
CAngulo b(20,20,20);
CSetor c(10,20,30,5);
CSetor d(20,40,40,15);
if(a < b) cout<<"a e menor que b"<<endl;
else cout<<"a e maior que b"<<endl;
if(c.menorTamanhoQue(d)) cout<<"c e menor que d"<<endl;
else cout<<"c e maior que d"<<endl;
}
首先,您的 menhorTamanhoQue
声明需要 2 个参数,但定义需要一个。
声明应该是
bool menorTamanhoQue(const CSetor &a);
然后定义应该是
bool CSetor::menorTamanhoQue(const CSetor &a)
{
return this->CAngulo::operator<(a) // explicitly call base class operator<
&& this->raio < a.raio; // and check raio
}
这里是 demo。
我在派生的 class.
的方法 (menorTamanhoque()) 中使用重载运算符 < 时遇到问题我这里有基地class:
class CAngulo
{
protected:
int grau, minutos, segundos;
public:
CAngulo(void);
CAngulo(int g,int m, int s);
CAngulo(const CAngulo &p);
bool operator< (const CAngulo &p);
};
CAngulo :: CAngulo(void)
{
grau=10;
minutos=5;
segundos=15;
}
CAngulo :: CAngulo(int g, int m ,int s)
{
grau=g;
minutos=m;
segundos=s;
}
CAngulo :: CAngulo(const CAngulo &p)
{
grau=p.grau;
minutos=p.minutos;
segundos=p.segundos;
}
bool CAngulo :: operator < (const CAngulo &p)
{
if(grau>p.grau)
return(false);
else if(grau<p.grau)
return(true);
else if(grau==p.grau)
{
if(minutos>p.minutos) return(false);
else if(minutos<p.minutos) return(true);
else if(minutos==p.minutos)
{
if(segundos>p.segundos) return(false);
else return(true);
}
}
}
这里我有派生的 class,我想在其中使用上面的重载运算符:
class CSetor : public CAngulo
{
private:
int raio;
public:
CSetor(void);
CSetor(int g,int m, int s, int r);
CSetor(const CSetor &p);
bool menorTamanhoQue(const CSetor &a);
};
CSetor :: CSetor(void)
{
grau=10;
minutos=5;
segundos=15;
raio=10;
}
CSetor :: CSetor(int g, int m ,int s, int r)
{
grau=g;
minutos=m;
segundos=s;
raio=r;
}
CSetor :: CSetor(const CSetor &p)
{
grau=p.grau;
minutos=p.minutos;
segundos=p.segundos;
raio=p.raio;
}
bool CSetor :: menorTamanhoQue(const CSetor &a)
{
}
不知道如何实现最后一个方法 menorTamanhoque (我必须使用重载 < 来比较 c 和 d 并检查是否 this->raio < a.raio)
这是主要内容,以便你们了解程序的作用:
int main()
{
CAngulo a(10,10,10);
CAngulo b(20,20,20);
CSetor c(10,20,30,5);
CSetor d(20,40,40,15);
if(a < b) cout<<"a e menor que b"<<endl;
else cout<<"a e maior que b"<<endl;
if(c.menorTamanhoQue(d)) cout<<"c e menor que d"<<endl;
else cout<<"c e maior que d"<<endl;
}
首先,您的 menhorTamanhoQue
声明需要 2 个参数,但定义需要一个。
声明应该是
bool menorTamanhoQue(const CSetor &a);
然后定义应该是
bool CSetor::menorTamanhoQue(const CSetor &a)
{
return this->CAngulo::operator<(a) // explicitly call base class operator<
&& this->raio < a.raio; // and check raio
}
这里是 demo。