Zugriffsbereiche von Klassen (Anfängerfrage)



  • Ich habe folgendes Problem:

    class BigClass
    {
     public:
        void AnyMethod(void);
    
     protected:
        SmallClass smallclass;
        OtherClass otherclass;
    }
    
    class OtherClass
    {
     public:
        void AnotherMethod(void);
    }
    
    int main()
    {
     BigClass bigclass;
     return 0;
    }
    

    So und nun will eine der Methoden von smallclass auf

    a) bigclass.AnyMethod() und
    b) auf otherclass.AnotherMethod()

    zugreifen. smallclass und otherclass sollen aber protected bleiben. Wie?



  • Einfach machen



  • Probiers halt aus bevor du solche Fragen stellst 🙄
    Da anyMethod und anotherMethod als public deklariert ist kann die jeder und alles benutzen 😋



  • ääääääöü schrieb:

    Einfach machen

    zzZZZzz schrieb:

    Probiers halt aus bevor du solche Fragen stellst 🙄

    Bevor ihr euch so genial vorkommt, solltet ihr die Problemstellung noch einmal überdenken. otherclass ist in diesem Kontext protected, deshalb ist ein Zugriff von aussen nicht möglich. Auch die Tatsache, dass sich smallclass in der gleichen Klasse ( bigclass ) wie otherclass befindet, ändert nichts an der Zugriffsberechtigung.

    Du könntest das mit friend lösen, um spezifischen Zugriff zu erlauben.

    Du hast auch einige formale Fehler und Unschönheiten bzw. überflüssigen Code:

    class BigClass
    {
       // ...
    };  // Hier kommt ein Strichpunkt (bei den anderen Klassenblöcken auch)!
    
    void AnotherMethod(void); // Bei Funktionen ohne Parameter musst du kein void in die Klammern schreiben.
    
    int main()
    {
     return 0;  // Ist auch überflüssig, main() gibt standardmässig 0 zurück.
    }
    

    Ausserdem würde ich mir den ganzen Aufbau noch einmal überlegen.
    OtherClass ist zu dem Zeitpunkt, wo es als Member in BigClass vorkommt, noch nicht definiert. Wie willst du auf bigclass zugreifen, wenn davon noch keine Instanz vorkommt (oder wo ist SmallClass definiert)?



  • Eine weitere Möglichkeit wäre das über eine Hilfsfunktiokn von BigClass zu lösen, welche dir die Funktionen aufruft, die du willst.



  • das system ist eigendlich ganz einfach

    public lässt zugriffe von allem und jedem zu
    private blockt alles ab, ausser eine memberfunktion greift auf private variablen und funktion zu
    protected ist wie private, nur dass bei vererbung die protected sachen in der abgeleiteten klasse auch private sind und nicht wie bei private unsichtbar



  • ... also ich möchte aus meiner txt datei nicht alles im programm sehn nur ein paar zeichen aus der textdatei wie kireg ich das hin dass ich das hin???
    also ich kann euch zeigen was ich schon gemacht habe 😃 :::

    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    #include <math.h>

    main ()
    {
    char hp[20], string[80], pfad[]=" > C:\\programm.txt";
    int i,laenge;

    printf("Geben Sie die gew\x81nschte internet Adresse ein: ");
    gets(hp);

    strcpy(string, "ping ");
    strcat(string, hp);
    strcat(string, pfad);
    system(string);

    //printf("( g %s);",hp);

    laenge = strlen(hp);

    /* ifstream voc_stream("C:\\programm.txt");
    vector<string> lines;
    string temp;
    while(getline(voc_stream, temp))
    {
    lines.push_back(temp);
    }
    */

    getch();
    }

    nur das klappt i wie nich 😕 ... ich versteh auch nich warum 😕 ... und ich glaube wennsch das so mache dann kriegsch die ganze textdatei da rein aber wie gesagt ich will nur ein paar zeichen haben...

    die textdatei sieht im moment so aus und wird ständig verändert::

    Ping www.l.google.com [74.125.39.103] mit 32 Bytes Daten:

    Zeitberschreitung der Anforderung.

    Zeitberschreitung der Anforderung.

    Zeitberschreitung der Anforderung.

    und das was in "[...]" ist will ich in meinem programm haben... also das programm soll ungefähr so aussehn:

    Bitte geben sie ihre Adresse an: // dann gibt man die die adresse an z.B. www.google.de

    die IP der angegebenen adresse lautet: // die einfügung aus der textdatei

    könnte mir einer bitte helfen?? 👍



  • Danke für eure Hilfe.
    Angenommen, ich deklariere in BigClass smallclass und otherclass auch als public, mit den bereinigten Fehlern etwa so:

    class OtherClass
    {
     public:
        void AnotherMethod(void);
    };
    
    class SmallClass
    {
     public:
        void CallMethod(void)
        {
         // Was muss hier stehen? Einfach otherclass.AnotherMethod();?
        }
    };
    
    class BigClass
    {
     public:
        void AnyMethod(void);
        SmallClass smallclass;
        OtherClass otherclass;
    };
    
    int main()
    {
     BigClass bigclass;
    }
    

    Kann ich jetzt in smallclass.CallMethod() einfach otherclass.AnotherMethod mit gleichnamigem Befehl aufrufen?

    @DonFlippy: Öffne mal ein neues Thema, bevor du hier mit einer völlig anderen Frage einfach reinplatzt!! Und übrigens: Zur Markierung von

    Code
    

    dient der Befehl "code" in eckigen Klammern oder die gleichnamige Schaltfläche.



  • Oben meinte ich otherclass.AnotherMethod() mit Klammern. Anscheinend gibts hier keinen edit-Befehl. Ach so, als Unregistrierter... Stimmt. Egal.


Log in to reply