Cześć, próbowałem dzisiaj zmierzyć się z odcinkiem 5 programowania obiektowego w C++ Pana Zelenta (dziedziczenie), jednak tworząc oddzielne pliki dla każdej klasy i napotkałem pewien problem.
Tak wygląda klasa Punkt (Punkt.h oraz Punkt.cpp):
#pragma once
#include <iostream>
class Punkt
{
std::string name;
int x, y;
public:
void wczytaj();
void pokaz();
Punkt(std::string n="Brak", int xx=0, int yy=0);
};
#include "Punkt.h"
void Punkt::wczytaj()
{
std::cout << "Podaj nazwe punktu: ";
std::cin >> name;
std::cout << "Podaj wspolrzedna x punktu: ";
std::cin >> x;
std::cout << "Podaj wspolrzedna y punktu: ";
std::cin >> y;
}
void Punkt::pokaz()
{
std::cout << "Nazwa punktu: " << name << std::endl;
std::cout << "Wspolrzedne punktu: (" << x << ", " << y << ")" << std::endl;
}
Punkt::Punkt(std::string n, int xx, int yy)
{
name = n;
x = xx;
y = yy;
}
Dla Punktu wszystko działa jak powinno. Tworzę klasę Koło, która publicznie dziedziczy z klasy Punkt (Kolo.h oraz Kolo.cpp):
#pragma once
#include "Punkt.h"
class Kolo :
public Punkt
{
int r;
std::string name;
public:
void wczytaj();
void pokaz();
Kolo(std::string cn="Brak", std::string pn="Brak", int xx=0, int yy=0, int rr=1);
};
#include "Kolo.h"
void Kolo::wczytaj()
{
Punkt::wczytaj();
std::cout << "Podaj nazwe kola: ";
std::cin >> name;
std::cout << "Podaj promien kola: ";
std::cin >> r;
}
void Kolo::pokaz()
{
Punkt::pokaz();
std::cout << "Nazwa kola: " << name << std::endl;
std::cout << "Promien kola: " << r << std::endl;
}
Kolo::Kolo(std::string cn, std::string pn, int xx, int yy, int rr)
:Punkt(pn, xx, yy)
{
name = cn;
r = rr;
}
Tutaj również wszystko w porządku. Mój problem zaczyna się jednak, gdy chcę stworzyć klasę Kula, która dziedziczy publicznie z klasy Koło:
#pragma once
#include "Kolo.h"
class Kula :
public Kolo
{
float v;
public:
void wczytaj();
void pokaz();
Kula(std::string cn = "Brak", std::string pn = "Brak", int xx = 0, int yy = 0, int rr = 1, float vv = 1.0);
};
#include "Kula.h"
void Kula::wczytaj()
{
Kolo::wczytaj();
v = 4.0 / 3.0 * 3.14 * r * r * r;
}
void Kula::pokaz()
{
Kolo::pokaz();
std::cout << "Objetosc kuli stworzonej z obrotu podanego kola: " << v;
}
Kula::Kula(std::string cn, std::string pn, int xx, int yy, int rr, float vv)
:Kolo(cn, pn, xx, yy, rr)
{
v = vv;
}
Problem polega na tym, że nie mogę się dostać do żadnego atrybutu klasy Kula. Konkretnie, w tym przypadku - nie mogę dostać się do atrybutu r Kuli (promień) w funkcji void Kula::wczytaj(), ale próbowałem również z innymi atrybutami - to samo. Wszystkie atrybuty wpisywane w funkcjach z przestrzenią nazw Kula:: chcą "dobrać się" do atrybutów Koła, a nie Kuli (co pokazuje Visual Studio). Byłbym bardzo wdzięczny za jakąkolwiek wskazówkę.