Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Virtuaalifunktion perintä

tkok [17.11.2011 10:28:13]

#

Moi, aloittelen jälleen c++ ohjelmointia ja en saa ratkaisua toimimaan vaikka on mielestäni suoraan oppaan esimerkin mukainen, koodi:

#include <iostream>
#include <stdlib.h>
using namespace std;

class Shape
{
  protected:
   int width, height ;
  public:
   Shape( int w, int h ) { width = w; height = h; }
   virtual int area() const = 0; // const member: the function is prohibited from modifying the object
};

//oma osuus alkaa
class Rectangle : public Shape
{
  public:
    int area();
    Rectangle(int w, int h);
};

Rectangle::Rectangle(int w, int h) : Shape(w,h){}
int Rectangle::area(){return width*height;}

class Triangle : public Shape
{
  public:
    int area();
    Triangle(int w, int h);
};

Triangle::Triangle(int w, int h) : Shape(w,h){}
int Triangle::area(){return width*height*0.5;}//int palautustyyppi vaikka 0.5 kerroin, ei takerruta nyt siihen kiitos
//oma osuus loppuu

int main(int argc, char *argv[])
{
  // The generation of random integers a and b is hidden
  Rectangle rect(a, b);
  Triangle trgl(a, b);
  cout << "a = " << a << " and " << "b = " << b << endl;
  cout << "Rectangle area: " << rect.area() << endl;
  cout << "Triangle area: " << trgl.area() << endl;
  return 0;
}

virhe:
Cannot declare variable "rect" to be of abstract type "Rectangle"
because virtual int Shape::area() const virtual fuction is pure within "Rectangle"

Tehty hassun hauskan c++-oppaan neuvoin http://www.nic.funet.fi/c opas/periytym.html

Kyseessä koulutehtävä ja oman koodin osuus merkitty kahdella kommentilla

EDIT: keskustelun otsikon kirjoitusvirhettä ei pysty editoimaan pois :(

Gaxx [17.11.2011 12:55:42]

#

Shape:ssa on määritelty virtual int area() const, mutta muissa int area()

Et siis toteuta omissa luokissasi Shapen vaatimaa area-metodia. Ongelma korjaantuu lisäämällä const-sana metodien perään, kuten Shapessakin.

tkok [17.11.2011 14:49:26]

#

Selvä, kiitos avusta!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta