Dziedziczenie tablicy char[] przez konstruktor

0

Mam taki kod:

 
#include <cstdlib>
#include <iostream>

using namespace std;

class A
{
public:
	int num_int;
	A(int x)
	{
		num_int=x;
	}
	void Show_Data()
	{
		cout<<"Liczba calkowita: "<<num_int<<endl;
	}
};

class B:public A
{ 
	char tekst[20];
public:

	B(int x,char txt[]):A(x)
	{
		for(int i=0;i<20;i++)
			tekst[i]=txt[i];
		num_int=x;
	}
	void Pokaz_Dane()
	{
		cout<<"Tekstem jest: "<<tekst<<endl;
	}
};


int main(void)
{ 
	A ob_A(1);
	B ob(2,"Jaś Fasola");
	//C ob_(3,”Benny Hill”);
	ob_A.Show_Data ();
	ob_B.Pokaz_Dane ();
	//C.Pokaz_Dane ();
}

Jestem początkujący więc proszę o wyrozumiałość.
Jak mam to zrobić żeby zadziałało.

0

Co znaczy nie działa?
W konstruktorze B przekraczasz zakres tablicy. To Twoje 20 w warunku pętli jest totalnie bez sensu, daj 'strlen(txt)'.

0

Ale co ma działać? Co Ty próbujesz osiągnąć? Masz dwie klasy, jedna przechowuje int, druga char[20], konstruktor B niepotrzebnie przypisuje ponownie x do num_int. Dodatkowo masz dwie funkcje, z których jedna nazywa się po angielsku a druga tak samo, tylko po polsku. Jedna wypisuje liczbę z klasy bazowej, druga napis z klasy pochodnej. Ogólnie nie ma to większego sensu.

0

Ogólnie to zawiesza mi komputer ale chyba już wiem.

Jednak nie wiem.
Zawiesza mi się Dev i muszę zamykać proces.
To ma coś wspólnego z biblioteką string.h

0

Po pierwsze zmienne w klasach rob prywatne a do nich metody dostepowe. Jesli chcesz kopiowac jakis ciag znakow uzyj strcpy, to co robisz jest bledne. Nie znasz z gory dlugosci ciagu a kopiujesz do 20. Jesli w klasie B uzyles listy inicjalizacyjnej w celu wywolanai konstruktora klasy A i inicjalizacji zmiennej z klasy A to nie rob potem tego samego przypisania. Zamiast robic 2 metody, ktore robia to samo pod inna nazwa, lepiej przeciazyc odziedziczona metode lub uzyc metod wirtualnych.

#include <iostream>
#include <cstring>

using namespace std;

class A
{
private:
    int num_int;
public:
    A(int x)
    {
        num_int=x;
    }
    void Show_Data()
    {
        cout<<"Liczba calkowita: "<<num_int<<endl;
    }
};

class B:public A
{
private:
    char tekst[20];
public:

    B(int x,char txt[]):A(x)
    {
        strcpy(tekst,txt);
    }
    void Show_Data()
    {
        A::Show_Data();
        cout<<"Tekstem jest: "<<tekst<<endl;
    }
};


int main(void)
{
    A a(1);
    B b(2,"Jaś Fasola");
    a.Show_Data();
    b.Show_Data();
    return 0;
}
0

Nie masz obiektu ob_B, ale się do niego odwołujesz za pomocą ob_B.Pokaz_Dane (). Wolno tak? ;>

EDIT:
To było do TalibX

0
TalibX napisał(a):

Zawiesza mi się Dev i muszę zamykać proces.

Ot pierwsze lepsze linki z googla a'la must read dla "dlaczego nie używać dev-c++":
http://kazafin.wordpress.com/2010/02/21/dlaczego-nie-warto-uzywac-dev-c/
http://forum.tibia.tv/showthread.php?24062-Dlaczego-powiniene%B6-zmieni%E6-Dev-C-na-co%B6-innego-i-jak

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