Можем ли мы включить функции-члены внутри структуры в C++? Как и в классах, мы можем помещать функции внутри структур. Если да, то в чем смысл сохранения как структур, так и классов на C++?Можем ли мы включить функции-члены внутри структуры в C++?
ответ
Можем ли мы включить функции-члены внутри структуры в C++?
Да. Класс является классом, независимо от того, объявлено ли оно с помощью ключевого слова class
или struct
. Единственная разница - доступность по умолчанию: общедоступная для struct
и приватная для class
.
Если да, то какое удовольствие уделяется сохранению как структур, так и классов на C++?
Историческая странность. Ключевое слово class
было добавлено, чтобы сделать C с классами (поскольку C++ изначально назывался), чувствуют себя более объектно-ориентированными; но никто не видел причин, по которым традиционные типы struct
ведут себя так же, как и новые типы class
, поэтому мы закончили с двумя более или менее эквивалентными словами для одного и того же.
Я думаю, что это было сознательное решение, поэтому мой ответ – CashCow
Один очевидный ответ, что «структура» была включена в стандарт, чтобы дать обратную совместимость с С.
Чтобы вперед объявленные Структуры в интерфейсе C, который под реализуется с помощью C++ класса, они позволили-структуру для быть классом со всеми функциями.
Другими словами, вы можете опубликовать интерфейс, который может быть вызван из кода C:
struct Foo;
#ifdef __cplusplus
extern "C" { // to use with C or C++
#endif
void myFunc1(struct Foo *);
int myFunc2(const struct Foo *);
#ifdef __cplusplus
}
#endif
Затем в реализации (в C++)
struct Foo
{
private:
int myMember;
public:
void myFunc1();
int myFunc2() const;
};
void myFunc1(Foo * foo) { foo->myFunc1(); }
int myFunc2(Foo const* foo) { return foo->myFunc2(); }
Ваш класс может использоваться не только C, но библиотеки C++, которые, возможно, не совместимы с вашими (но с C) бинарными версиями, из языков сценариев, имеющих привязки с C и т. Д.
- 1. Не можем ли мы включить файл .c?
- 2. Можем ли мы включить задержки структурной архитектуры?
- 3. Можем ли мы включить и отключить кластер?
- 4. Можем ли мы получить элементы внутри iframe?
- 5. Можем ли мы использовать UmlStateMachineModelFactory внутри StateMachineBuilder
- 6. Можем ли мы назвать MapView внутри макета
- 7. Можем ли мы создать PDS внутри PDS
- 8. Можем ли мы использовать скриптлеты внутри Javascript?
- 9. Можем ли мы использовать ThreadGroup внутри ThreadGroup
- 10. Можем ли мы определить enum внутри функции?
- 11. Можем ли мы генерировать внутри всегда блока?
- 12. Можем ли мы объявить функции внутри функций?
- 13. Почему мы используем указатель структуры внутри определения структуры в C?
- 14. Можем ли мы вернуть функцию в C++?
- 15. Можем ли мы использовать javascript в C#?
- 16. Можем ли мы использовать «#elif!» в c?
- 17. Можем ли мы реализовать наследование в C
- 18. Почему мы не можем инициализировать элементы внутри структуры?
- 19. Можем ли мы включить Game Center для конкретной версии?
- 20. Можем ли мы включить() в определение этапа огурца?
- 21. Можем ли мы включить 2 функции Mail() в 1 страницу?
- 22. Можем ли мы включить php-файл в html-файл?
- 23. Можем ли мы включить Adobe Bracket в PySide TextEditor?
- 24. Можем ли мы включить компонент углов в Facelets page
- 25. Почему мы можем получить смещение такой структуры?
- 26. Можем ли мы вложить IF внутри COUNTIFS в Excel?
- 27. Можем ли мы реализовывать ANSI C `offsetof` в Delphi?
- 28. Можем ли мы сменить порядок объявления на C или C++?
- 29. Можем ли мы иметь функцию без имени в C?
- 30. Можем ли мы передать элемент структуры таким образом?
Да. 'struct' и' class' по существу одинаковы. – juanchopanza
Как и http://stackoverflow.com/questions/54585/when-should-you-use-a-class-vs-a-struct-in-c – Yousf
Общим соглашением является использование класса для ООП и 'struct', когда вы просто группируете связанные переменные, к которым обращаются напрямую (например,' std :: pair'). Это хорошо работает, потому что 'class' является закрытым по умолчанию, а' struct' является общедоступным по умолчанию. Однако это не обеспечивается языком, и оба могут выполнять ту же работу, что и друг друга. – JBentley