Frage zur objektorientierten programmierung

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Frage zur objektorientierten programmierung

    Huhu,
    ich erlerne gerade c++/cli und nun tut sich bei einem kleinen tutorial eine frage auf.
    ich habe die konsolenanwendung komplett selbst geschrieben, streng nach tutorial. alles funktioniert einwandfrei, aber hier kommt meine frage: wieso funktioniert das so einwandfrei??

    Erläuterung:

    Ich habe eine Klasse "Sparbuch", in der headerdatei steht unter Anderem folgendes:

    Quellcode

    1. #pragma once
    2. ref class Sparbuch
    3. {
    4. double kapital;
    5. double zins;
    6. public:
    7. Sparbuch(double kapital, double zins);
    8. ...
    9. }


    Augenmerk auf die double-variable "zins"!


    In der zugehörigen .cpp steht unter anderem:

    Quellcode

    1. ...
    2. Sparbuch::Sparbuch(double kapital, double zins)
    3. {
    4. this->kapital = kapital;
    5. this->zins = zins;
    6. }
    7. ...


    Augenmerk bitte wieder aufs "zins"!


    In der main-funktion steht nun unter anderem das hier:

    Quellcode

    1. ...
    2. String ^eingabe;
    3. double kapital, zinsen;
    4. ...
    5. Sparbuch ^meinSparbuch = gcnew Sparbuch(kapital, zinsen);
    6. ...


    plötzlich wird aus "zins" -> "zinsen" ...
    ich habe dann auch gan brav "zinsen" geschrieben und erwartet, dass es nicht funktionieren wird. wieso funktioniert das denn nun doch?
    In der letzten zitierten code-zeile erstelle ich doch ein Objekt der Klasse Sparbuch, dieses Objekt müsste doch eigentlich die Variablen kapital und "zins" haben, da sie ja so in der Klasse deklariert wurde oder nicht?!

    Gruß
    naibaf
    True story!
  • Das liegt an den Sichtbarkeitsbereichen und hat mit Objektorientierung noch gar nichts zu tun.

    In der Funktion Sparbuch::Sparbuch (ja, der Konstruktor ist auch nur eine Funktion) definierst du dir den Zweiten Parameter, also den zweiten Wert, den man der Funktion übergeben soll, als eine Variable vom Typ double mit Namen "zins". Was du der Funktion also als zweites Übergibst, hat innerhalb der Funktion den Namen "zins".

    In der Main definierst du dir eine andere Variable namens "zinsen", die du de Funktion übergibst. Diese beiden haben überhaupt nichts miteinander zu tun; du hättest sie auf "marmelade" oder "fluttershy" nennen können, oder dort direkt eine Zahl angeben können.

    Beim abarbeiten der Zeile in der Main wird die Variable "zinsen" ausgewertet, und der Wert dieser Variable an die Funktion übergeben, welche diesen Wert in die lokale Variable "zins" speichert.

    Deswegen funktioniert das. Ich hoffe, das war verständlich.
  • Das sind einfach unterschiedliche Namen.. Die Variable wird in der Funktion neu erstellt.. Es ist schwer zu erklären^^ Aber:
    Im Prototypen [sprich in der Class selbst(in deinem Fall ist es ein Konstruktor)] müssten nur die Variablentypen stehen (int, char, double, float, usw..). Hier kann man aber auch noch einen Namen angeben, muss man aber nicht.
    In der Funktionsdefinition (also wo steht, was gemacht werden soll wenn diese Funktion aufgerufen wird) muss der Variablentyp + ein Name [Muss nicht gleich wie der im Main sein] sein. (int x, char z, double db, usw...)
    Und im Funktionsaufruf muss die Variable stehen die übergeben werden will (Der Name ist wieder unabhängig zum Prototypen und zur Funktionsdefinition) [In deinem Fall ist es ein Konstruktor, aber Konstruktoren haben nicht wirklich einen großen Unterschied zu Funktionen/Methoden]

    Ich selbst bin noch kein Profi im objektorientierten Programmieren, und wenn ich was falsch habe, korrigiert mich einfach ;)

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • okay danke, ja das war verständlich ...
    ja ich wusste nicht, wie ich klassen, objekte und eben die funktioniern bündig in die überschrift packen kann :D

    Gut, demnach ist der name der variablen egal :P gut, danke :)
    True story!