Можете ли вы перегрузить то, что возвращает само имя переменной объекта? - PullRequest
0 голосов
/ 26 февраля 2020

Предположим, у меня есть класс с именем MyClass, а затем я создал объект из этого класса:

MyClass obj1;

Что я хочу сделать, это сделать obj1, когда он сам по себе используется для возврата например, предположим, что я хочу, чтобы он возвратил int, поэтому, если я сделал следующее:

printf("%d", obj1); 

, тогда printf() должен напечатать int.

Can это должно быть сделано в C ++?

1 Ответ

1 голос
/ 27 февраля 2020

Можно сделать большую часть времени (но printf потребует немного больше усилий):

class MyObject {
...
    operator int() const { // user-defined conversion operator
        return /*the value you want to see*/;
    }
...

Таким образом, в любой момент вы передаете объект функции, которая принимает int а не MyObject, оператор преобразования вызывается для получения этого int. Он также будет вызываться для явных приведений типа (int)obj.

printf проблематично c, поскольку он не принимает специально int - он принимает что-либо (подпись более или менее int printf(const char *, ...)). Так что вам придется называть это как printf("%d\n", (int)obj1);.

Я бы посоветовал не использовать printf слишком много, это наследие C, поэтому не может быть безопасным для типов (например, printf("%s", 1) это неизбежный Cra sh). Используйте fmt или iostreams, например.

...