Obiekty klasy jako składowe drugiej

0

Witam, od jakichś dwóch godzin próbuję napisać coś takiego:

class punkt
{
  public:
    int x,y;

   public:
    punkt(int x, int y)
    {
        this->x = x;
        this->y = y;
    }
};

class prosta
{
   punkt a,b;

prosta(a,b)
{
this->a = a;
this->b = b;
}
    void show()
{
   cout << this->a.x+this->a.y+this->b.x+this->b.y << endl;
}

}
 
int main()
{
punkt a(1,1);
punkt b(3,2);
prosta x(a,b);
x.show();
}

};

ale oczywiście masa błędów. Podejrzewam, że coś z konstruktorem prostej, ale nie ogarniam tej złożonej konstrukcji :C

0

#Nie ma typow argumentow w konstruktorze.
#Prosta nie sklada sie z 2 punktow, tylko sklada sie z 1 rownania i jest nieskonczona sekwencja punktow wyliczana na podstawie tego rownania.
#Formatowanie fatalne...

0

Formatowanie się popsuło.
Co do prostej to wiem, ale chodziło mi tylko o dwa końce.
Konstruktory już naprawiłem.
Nie pomogłeś w zasadniczym problemie :)

1

Co do prostej to wiem, ale chodziło mi tylko o dwa końce

Prosta nie ma koncow.

Nie pomogłeś w zasadniczym problemie

Pomyslmy czemu....

masa błędów

Jakich bledow?

0

No to zakładamy, że to odcinek...

C:\Documents and Settings\USER\Pulpit\dd.cpp||In constructor 'prosta::prosta(punkt, punkt)':|
C:\Documents and Settings\USER\Pulpit\dd.cpp|24|error: no matching function for call to 'punkt::punkt()'|
C:\Documents and Settings\USER\Pulpit\dd.cpp|11|note: candidates are: punkt::punkt(int, int)|
C:\Documents and Settings\USER\Pulpit\dd.cpp|6|note: punkt::punkt(const punkt&)|
C:\Documents and Settings\USER\Pulpit\dd.cpp|24|error: no matching function for call to 'punkt::punkt()'|
C:\Documents and Settings\USER\Pulpit\dd.cpp|11|note: candidates are: punkt::punkt(int, int)|
C:\Documents and Settings\USER\Pulpit\dd.cpp|6|note: punkt::punkt(const punkt&)|
C:\Documents and Settings\USER\Pulpit\dd.cpp|43|error: expected declaration before '}' token|
||=== Build finished: 3 errors, 0 warnings ===|

0

Tak powinien według mnie wyglądać ten kod (ewentualnie rozbić to jeszcze na pliki nagłówkowe):

#include <iostream>


class point 
{
public:
  point(const int x, const int y) 
    : x_(x), y_(y) {}

  // wolno ustawić też x i y jako zmienne publiczne, 
  // ale wydaje mi się, że lepiej uzyć tutaj 'getterów'
  // i 'setterów' bo możesz potem potrzebować sprawdzić
  // wprowadzane wartości np. 
  // void set_x(const int x) { x_ = std::max(100, x); }
  int get_x() const { return x_; }
  int get_y() const { return y_; }

private:
  int x_, y_;

};


class line
{
public:
  line(const point &a, const point &b)
    : a_(a), b_(b) {}

  // lepiej zastosować funkcję, która coś zwraca
  // niż wyświetla na ekranie
  void show() const
  {
    // nie wiem o co tutaj chodziło, więc to przepisałem
    std::cout << (a_.get_x() + a_.get_y() + b_.get_x() + b_.get_y()) << std::endl;
  }

private:
  point a_, b_;
};


int main(int argc, char **argv)
{
  point a(1, 1);
  point b(3, 1);

  line x(a, b);
  x.show();

  return 0;
}
0
struct Punkt {
  Punkt(int x, int y): x(x), y(y) { ; }

private:
  int x, y;
};

struct Odcinek {
  Odcinek(Punkt a, Punkt b): a(a), b(b) { ; }

private:
  Punkt a, b;
};

int main() {
	Odcinek(Punkt(123, 123), Punkt(1231, 1211));
	return 0;
}

http://ideone.com/yZKfM6

0

Ok, już to trochę przerobiłem i działa tak jak chciałem. Dzięki za pomoc.

0

Twój problem polegał na tym, że prosta miała konstruktor prywatny. Wszystko deklarowane bez akcesora domyślnie jest prywatne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1