Verwendung von Funktionsüberschreibungen in Solidity

Ich versuche, von anderen Verträgen zu lernen und habe ein Beispiel gesehen, das ich nicht verstehe. In diesem Beispiel wird ein erster Vertrag wie folgt definiert, aber es scheint, dass die Funktionen eigentlich nichts tun. (Übrigens ist dies der Etherdelta Smart Contract ...)

contract Token {

  //part of the contract functions goes here

  function transfer(address _to, uint256 _value) returns (bool success) {}

  // other part of the contract functions goes here
}

Dann wird ein neuer Vertrag definiert, der sich anscheinend auf den ersten Vertrag bezieht:

contract StandardToken is Token {

  function transfer(address _to, uint256 _value) returns (bool success) {
    //Default assumes totalSupply can't be over max (2^256 - 1).
    //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
    //Replace the if with this one instead.
    if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
    //if (balances[msg.sender] >= _value && _value > 0) {
      balances[msg.sender] -= _value;
      balances[_to] += _value;
      Transfer(msg.sender, _to, _value);
      return true;
    } else { return false; }
  }

Kann mir bitte jemand erklären, was das bewirkt?

Antworten (1)

Der Vertragsstandard Token wird von Token abgeleitet. Dieses Konzept wird Vererbung genannt .

Solidity als vertragsorientierte Programmiersprache ermöglicht eine Vererbung, die es neuen Verträgen ermöglicht, die Eigenschaften bestehender Verträge zu übernehmen.

Funktionen können durch eine andere Funktion mit demselben Namen und derselben Anzahl/Art von Eingängen überschrieben werden.

Hier transferwird die Funktion in Token in ihrem abgeleiteten Vertrag StandardToken überschrieben.

Dies ist nützlich für Polymorphismus, bei dem Sie verschiedene konkrete Implementierungen für verschiedene Verwendungszwecke definieren können, aber dennoch für alle dieselbe Schnittstelle bereitstellen können.

Im oben geposteten Code tokendefiniert Vertrag eine Funktion transfer, implementiert aber nicht deren Verhalten. Aber alle anderen Arten von Token (einschließlich standardtokendieser und möglicherweise anderer) können aus tokenVerträgen abgeleitet werden und in ihnen implementieren sie das für sie spezifische Verhalten entsprechend. Benutzer müssen nur wissen, dass es eine Funktion gibt, die aufgerufen wird transfer, um jede Art von Token-Verträgen zu verwenden, die von tokender Bereitstellung einer gemeinsamen Schnittstelle abgeleitet werden.

Verweisen Sie auch hier .

Vielen Dank für die schnelle Antwort, die es perfekt erklärt. Was ich aber nicht verstanden habe ist, warum sie das so machen.
Das dient im Grunde dem Zweck der Polymorphie, der verschiedene konkrete Implementierungen derselben abstrakten Schnittstelle ermöglicht.
Danke vielmals. Nein, ich bin nur ein Hobby-Programmierer und bin auf dieses Konzept noch nie gestoßen.
Nein ;-) Aber ich werde versuchen, es nachzuschlagen und zu sehen, was es bedeutet.
Sie sind willkommen, beziehen Sie sich auch auf diese Frage :)
Was passiert mit geerbten Funktionsmodifikatoren? Werden sie auch vererbt?