Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: C++ Vraagje over overerving.  (gelezen 2013 keer)

Offline JV.com

  • Lid
  • Steunpunt: Nee
C++ Vraagje over overerving.
« Gepost op: 2010/05/31, 20:33:39 »
Hallo beste mensen, ik heb een klein vraagje.

stel het volgende, ik heb 2 klasses waarop ik overerving op wil gaan toepassen. we hebben een Child class en een Parent Class.

#ifndef CLSSDL_H_INCLUDED
#define CLSSDL_H_INCLUDED

#include <SDL/SDL.h>

class ClsSDL
{
    private:
        static const int SCREENWIDHT;
        static const int SCREENHEIGHT;
        static const int SCREENBBP;
        SDL_Surface* RawImage;
        SDL_Surface* ConvertedImage;
        SDL_Surface* Screen;
    protected:
        SDL_Rect Position;
    public:
        ClsSDL();
        ~ClsSDL();
        int init_SDL();
        void Draw();
};

#endif // CLSSDL_H_INCLUDED

#ifndef CLSPONG_H_INCLUDED
#define CLSPONG_H_INCLUDED

#include "ClsSDL.h"

class ClsPong : ClsSDL
{
    private:
    protected:
    public:
        ClsPong();
        ~ClsPong();
        void mainloop();
};

#endif // CLSPONG_H_INCLUDED

Dit zou betekenen dat de Child class alle eigenschappen en functie´s krijgt van de Parent class + de eigenschappen die Child class zelf gedefinieerd heeft.

Nu heb ik een soort gelijke situatie en merkte dat, (zonder dat ik een instantie van de Parent class gemaakt had) de constructor aangesproken werd van de Parent class. Nu dacht ik, als de constructor van de Parent class al wordt aangesproken zonder dat ik er een instantie voor maak (ik denk dat dit komt omdat er sprake is van overerving). dan is alles wat ik nodig heb ik de Parent class al geïnitialiseerd en heb ik ook geen instantie nodig in mijn Child class om alle eigenschappen en functies te bereiken vanuit de Child class omdat er immer sprake ik van overerving.  

Nu probeerde ik deze Code:
#include <iostream>
#include "ClsPong.h"

using namespace std;

int main()
{
    ClsPong ObjPong;

/*   
 switch(ObjPong.init_SDL())
    {
        case 0:
        {
            cout << "awsome!";
        }break;
        case 1:
        {

        }break;
        case 2:
        {

        }break;
        case 3:
        {

        }break;
        case 4:
        {

        }
        default:
        {

        }break;
    }
*/
}


En dit ging goed, maar wanneer ik de commentaar tags weghaal krijg ik de volgende build error:

ClsSDL.h line:20 error: ‘int ClsSDL::init_SDL()’ is inaccessible
main.cpp line:10 error: within this context;
main.cpp line:10 error: ‘ClsSDL’ is not an accessible base of ‘ClsPong’

Dit snap ik niet, wie kan mij hierbij helpen?

Alvast bedankt,

JV.com
« Laatst bewerkt op: 2010/05/31, 20:35:18 door JV.com »

Offline JvH

  • Lid
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #1 Gepost op: 2010/05/31, 21:24:21 »
Mijn vermoeden is dat de functie init_SDL een of meer variabelen gebruikt die in je base class als 'private' zijn gedeclareerd. Deze variabelen zijn niet toegankelijk in de subclass. Daarvoor moeten die variabelen protected of public zijn.

Offline JV.com

  • Lid
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #2 Gepost op: 2010/05/31, 22:06:32 »
Nee dit is niet het geval, alle variabelen en functies die de base class gebruikt zijn binnen zichzelf gedefinieerd.

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #3 Gepost op: 2010/06/01, 08:10:36 »
De overerving is niet publiek.

Citaat
class ClsPong: public ClsSDL {};

Dat zou het moeten doen...
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline JV.com

  • Lid
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #4 Gepost op: 2010/06/01, 08:55:07 »
@SeySayux:

Bedankt alweer :D, ik zou het als ik vanmiddag thuis ben testen. en het resultaat posten.

Offline Rachid

  • Vertaalteam
    • rachidbm
    • Mijn blog
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #5 Gepost op: 2010/06/01, 10:20:21 »
De overerving is niet publiek.
Citaat
class ClsPong: public ClsSDL {};
Dat zou het moeten doen...
Is er een voordeel aan private overerving?
Of kun je misschien vertellen waarvoor je dat zou gebruiken...

Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: C++ Vraagje over overerving.
« Reactie #6 Gepost op: 2010/06/01, 16:03:24 »
De overerving is niet publiek.
Citaat
class ClsPong: public ClsSDL {};
Dat zou het moeten doen...
Is er een voordeel aan private overerving?
Of kun je misschien vertellen waarvoor je dat zou gebruiken...


http://www.parashift.com/c++-faq-lite/private-inheritance.html

Zelf nog nooit gebruikt eerlijk gezegd...

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net