class test {
public:
test &operator=(const test & other){} // 1
const test & operator+(const test& other) const {} // 2
const test & operator+(int m) {} //3
private:
int n;
};
int main()
{
test t1 , t2, t3;
// this works fine t1 = t2.operator+(t3) , calls 2 and 1
t1 = t2 + t3;
// this works fine t1 = t2.operator+ (100). calls 3 and 1
t1 = t2 + 100;
//this works fine t1 = (t2.operator+ (100)).operator+ (t3)
t1 = t2 + 100 +t3;
//why is the error in this one ????
// it should be t1 = (t2.operator+ (t3)).operator+ (100)
t1 = t2 + t3 + 100;
return 0;
}
1
A
Répondre
8
Parce que l'objet renvoyé par t2 + t3 est const et que vous ne pouvez pas appeler sa fonction non-const (3).
Cela fonctionne très bien dans le cas de "t1 = t2 + 100 + t3;", car l'objet retourné par t2 + 100 est const aussi, mais vous appelez sa fonction const (2), ce qui est correct.
1
- Modifier X pour tester.
- Ajoutez un point-virgule à la fin de l'avant-dernière instruction.
- Supprimez le const des valeurs de retour de l'opérateur d'addition lorsque vous les modifiez.
Les compiles suivantes:
class test {
public:
test& operator=(const test & other){} // 1
test& operator+(const X& other) const {} // 2
test& operator+(int m) {} //3
private:
int n;
};
int main()
{
test t1, t2, t3;
t1 = t2 + t3;
t1 = t2 + 100;
t1 = t2 + 100 + t3; // <-- added a ';'
t1 = t2 + t3 + 100;
return 0;
}
1
Vous avez manqué un const:
const test & operator+(int m) /* ADD CONST HERE */ const {} //3
Questions connexes
- 1. surcharge de surcharge, débordement récursive
- 2. surcharge BaseForm
- 3. Surcharge Stack.Push?
- 4. Surcharge des méthodes
- 5. problème de surcharge d'opérateur
- 6. fonction Javascript() littérale SURCHARGE
- 7. Surcharge statiques importations
- 8. surcharge [] [] dans C#
- 9. Surcharge de l'opérateur d'événement + =
- 10. Insertion Surcharge C Stream
- 11. Problème de surcharge MVC Html.TextArea
- 12. moniteur avec surcharge d'opérateur C++
- 13. Surcharge des méthodes STL C++
- 14. "surcharge de méthode" en javascript
- 15. problème override/surcharge C de
- 16. référencement souhaité méthode générique surcharge
- 17. Surcharge de l'opérateur >>
- 18. Constructeurs de surcharge dans VBScript
- 19. Objets et surcharge d'opérateur C++
- 20. System.Windows.Forms.Panel.Enabled = surcharge de couleur false?
- 21. Surcharge d'une méthode d'une superclasse
- 22. C++ fonction de modèle SURCHARGE
- 23. Surcharge d'un fichier existant en C#
- 24. Java Méthode de surcharge avec interface héritée
- 25. problème de surcharge l'opérateur <en C++
- 26. opérateur Surcharge en C++ comme int + obj
- 27. Voir la surcharge dans Zend Framework
- 28. Problèmes de pointeur avec surcharge en C++?
- 29. Surcharge "base" constructeur ou "this" constructeur?
- 30. Méthode de surcharge avec les types C#
du sens correct ajouter const à suivre fonctionne très bien test const & operator + (int m) const – anand