मैं आकार वर्ग से आयत, वृत्त और त्रिभुज वर्गों के लिए कुछ बहुस्तरीय विरासत करने की कोशिश कर रहा हूँ। आयत से मैं एक वर्ग वर्ग इनहेरिट करने और क्षेत्र, जानकारी, आदि .. के रूप में अच्छी तरह से दीर्घवृत्त से वृत्त और त्रिभुज से समद्विबाहु मुद्रित करने की जरूरत है। अब तक मेरी पहली विरासत में मिली कक्षाएं ठीक काम करती हैं, लेकिन जब भी मैं "पोते" वर्ग को काम करने की कोशिश करता हूं तो मैं इसे काम नहीं कर सकता। मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। यहाँ कोड है:

 #include <iostream>
 using namespace std;

 class Shape{
 protected:
 string name;
 float area;

 public:
 Shape(string nm):name(nm){}

 //Getters
 string     getName(){    return name;    }
 float    getArea(){}

 //Setters
 virtual void    setArea(){}

 //Print
 virtual void printInfo()
 {
    cout << "Name: " << name << " Color: " << endl;
}

};

class Rectangle :  public Shape{
private:
float length, width;

public:
Rectangle(string nm, float l, float w):Shape::Shape(nm), length(l), width(w){}
Shape::getName();

//Setters
void setArea(){ area = length*width; }

void printInfo(){
    //Shape::printInfo();
    cout << "Name: " << name << " L: " << length << " W: " << width << " A: " << area << endl;
}
};

class Square : public Rectangle{

private:
float length;

public:
Square(string nm, float l):length(l),Rectangle::Rectangle(nm){}
float     getLength(){return length;}

//Setters
void setArea(){ area = length *length; }

};

class Circle : public Shape{
private:
float radius;
const float pi = 3.0;

public:
Circle(string nm, float r):Shape::Shape(nm), radius(r){}

//Setters
void setArea(){ area = pi*radius*radius; }

void printInfo(){
    //Shape::printInfo();
    cout << "Name: " << name << " R: " << radius << " A: " << area <<      endl;
}
};

 //class Ellipse : public Circle{
 //
 //private:
 //    float length, width, radius1, radius2;
   //
//public:
//    Ellipse(string nm, int clr, float l, float w);
//
//    //Setters
//void setArea(){ area = radius1 * radius2; }
//
//};

class Triangle : public Shape{
private:
float a, base, c, height;

public:
Triangle(string nm, float a, float b, float c, float h):Shape::Shape(nm), a(a), base(b), c(c), height(h){}

//Setters
void setArea(){ area = (base*height)/2; }

void printInfo(){
    //Shape::printInfo();
    cout << "Name: " << name << " Color: " << " A: " << a << " Base: " << base <<  " C: " << c  << " H: " << height << " P: " << " A: " << area << endl;
}
};

//class Isosceles : public Triangle{
//
//private:
//    float base, height;
//
//public:
//    Isosceles(string nm, int clr, float l, float w);
//
//    //Setters
//    void setArea(){ area = (base*height)/2; }
//
//}; 

int main() {

Rectangle r("Rectangle", 10, 20);
Circle c("Circle", 1);
Triangle tt("Triangle", 2, 2, 3, 3);
Square ss("Square", 10);

Shape* s;
Shape* t;
Shape* u;
Shape* v;
s = &r;
t = &c;
u = &tt;
v = &ss;

//Set and print area of Rectangle
s->setArea();
s->printInfo();

//Set and print area of Circle
t->setArea();
t->printInfo();

//Set and print area of Triangle
u->setArea();
u->printInfo();

//Set and print area of Rectangle
v->setArea();
v->printInfo();


return 0;
}

स्क्वायर क्लास को यहाँ सेट करते समय मुझे एक त्रुटि मिलती है:

class Square : public Rectangle{

private:
float length;

public:
Square(string nm, float l):length(l),Rectangle::Rectangle(nm){}

मैंने दीर्घवृत्त और समद्विबाहु वर्गों पर टिप्पणी की ताकि मैं सही ढंग से स्क्वायर स्थापित कर सकूं और बाद में उन्हें काम न कर सकूं। मैं पहली बार कुछ पूछ रहा हूं, इसलिए अगर कुछ सही नहीं है तो कृपया मुझे बताएं। आपके सहयोग के लिए धन्यवाद।

0
Bran_Ortiz 18 अक्टूबर 2018, 05:46

1 उत्तर

सबसे बढ़िया उत्तर

आपकी स्क्वायर क्लास में मेरा मानना ​​है कि मुझे एक गलती मिली...

अपने स्क्वायर कंस्ट्रक्टर के साथ निम्नलिखित करने का प्रयास करें:

Square(string nm, float l):length(l),Rectangle::Rectangle(nm, l, l){} 

आपके पास जो था उसके विपरीत ... जो आपको स्क्वायर क्लास के साथ मिल रही त्रुटियों को ठीक करेगा।

अंतर का कारण यह है कि जब आप स्क्वायर कंस्ट्रक्टर से रेक्टेंगल कंस्ट्रक्टर को तर्क दे रहे थे तो आप कुछ तर्कों को बिना सोचे समझे छोड़ रहे थे (आयताकार कंस्ट्रक्टर में)।

2
Bilal Saleem 18 अक्टूबर 2018, 03:07