2014-01-13 4 views
-2

Можем ли мы включить функции-члены внутри структуры в C++? Как и в классах, мы можем помещать функции внутри структур. Если да, то в чем смысл сохранения как структур, так и классов на C++?Можем ли мы включить функции-члены внутри структуры в C++?

+0

Да. 'struct' и' class' по существу одинаковы. – juanchopanza

+1

Как и http://stackoverflow.com/questions/54585/when-should-you-use-a-class-vs-a-struct-in-c – Yousf

+0

Общим соглашением является использование класса для ООП и 'struct', когда вы просто группируете связанные переменные, к которым обращаются напрямую (например,' std :: pair'). Это хорошо работает, потому что 'class' является закрытым по умолчанию, а' struct' является общедоступным по умолчанию. Однако это не обеспечивается языком, и оба могут выполнять ту же работу, что и друг друга. – JBentley

ответ

2

Можем ли мы включить функции-члены внутри структуры в C++?

Да. Класс является классом, независимо от того, объявлено ли оно с помощью ключевого слова class или struct. Единственная разница - доступность по умолчанию: общедоступная для struct и приватная для class.

Если да, то какое удовольствие уделяется сохранению как структур, так и классов на C++?

Историческая странность. Ключевое слово class было добавлено, чтобы сделать C с классами (поскольку C++ изначально назывался), чувствуют себя более объектно-ориентированными; но никто не видел причин, по которым традиционные типы struct ведут себя так же, как и новые типы class, поэтому мы закончили с двумя более или менее эквивалентными словами для одного и того же.

+0

Я думаю, что это было сознательное решение, поэтому мой ответ – CashCow

0

Один очевидный ответ, что «структура» была включена в стандарт, чтобы дать обратную совместимость с С.

Чтобы вперед объявленные Структуры в интерфейсе 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 и т. Д.

Смежные вопросы