Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.98
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
#1

Отличия между структурами и классами - C++

18.08.2010, 12:38. Просмотров 14626. Ответов 58
Метки нет (Все метки)

Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:39     Отличия между структурами и классами #31
Пардон, это ViNew дал определение...
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 11:39     Отличия между структурами и классами #32
будет ли верным определение: "все что может быть мембером uniona - POD" в рамках стандарта от 2003?
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:42     Отличия между структурами и классами #33
Цитата Сообщение от Maxwe11 Посмотреть сообщение
будет ли верным определение: "все что может быть мембером uniona - POD" в рамках стандарта от 2003?
А нетривиальный конструктор? Мы можем его написать.
Кроме того, надо смотреть стандарт, нет ли ограничений на мемберство в unione - я просто не помню.
Дополнение.
Студия 2010:
C++
1
2
3
union a
{ vector<int> A;
};
выдает ошибку: Error 1 error C2621: member 'a::A' of union 'a' has copy constructor
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
28.07.2011, 14:45     Отличия между структурами и классами #34
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
нет ли ограничений на мемберство в unione - я просто не помню.
Кое-что есть:
A union can have member functions (including constructors and destructors), but not virtual (10.3) functions.
An object of a class with a non-trivial constructor (12.1), a non-trivial copy constructor (12.8), a non-trivial destructor (12.4), or a non-trivial copy assignment operator (13.5.3, 12.8) cannot be a member of a union, nor can an array of such objects.
Добавлено через 15 минут
C++0x, правда, добавляет таку возможность:
If a union has a member with a user-defined constructor, copy, or destructor then that special function is deleted; that is, it cannot be used for an object of the union type. This is new.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 14:58     Отличия между структурами и классами #35
asics, ну вот.
Как раз на нетривиальный copy-constructor VC++ 2010 и жаловался. Все правильно!
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:19     Отличия между структурами и классами #36

Не по теме:

Тему интересно почитать хотя бы из-за того ка "прошаренные" новички на форуме объясняют как истину последней инстанции что такое структура и что такое класс Спасибо им за поднятое настроение.


Побуду кепом: автореферентные классы/структуры создаются несколько по другому:
Так в классе один из объектов может быть этого же типа
C++
1
2
3
4
5
class Test
{
...
Test a;
}
а вот в структуре уже можно поместить только указатель на неё же
C++
1
2
3
4
5
struct Test
{
...
*Test a;
}
Но это так, чисто формальности.
CAHTEXHUK
Заблокирован
28.07.2011, 20:45     Отличия между структурами и классами #37
Цитата Сообщение от Gepar Посмотреть сообщение
Так в классе один из объектов может быть этого же типа
да ну как это возможно. Рекурсия получается. Мой msvs 2008 не принял это
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 20:49     Отличия между структурами и классами #38
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gepar Посмотреть сообщение
автореферентные классы/структуры
это что?

Цитата Сообщение от Gepar Посмотреть сообщение
Так в классе один из объектов может быть этого же типа
C++
1
2
3
4
5
class Test
{
...
Test a;
}
с какого перепугу?

Цитата Сообщение от Gepar Посмотреть сообщение
а вот в структуре уже можно поместить только указатель на неё же
C++
1
2
3
4
5
struct Test
{
...
*Test a;
}
это даже не указатель на структуру, а черт знает что

Добавлено через 1 минуту
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
да ну как это возможно. Рекурсия получается. Мой msvs 2008 не принял это
и не должен, потому что на момент компиляции размер класса Test неопределен

Добавлено через 1 минуту
Цитата Сообщение от Gepar Посмотреть сообщение
Но это так, чисто формальности.
с .NET-ом путаете товарищ!
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:50     Отличия между структурами и классами #39
CAHTEXHUK, а вот так:
C++
1
2
3
4
5
class Test
{
...
Test *a;
}
Извините, писал простой пример без компилятора и прочего, а в таких случаях вечно что-то забудешь, то точку с запятой то скобки уравновесить, в даном случае я забыл *.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
28.07.2011, 20:52     Отличия между структурами и классами #40
Gepar, тогда в чём отличия?
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:54     Отличия между структурами и классами #41
Цитата Сообщение от Maxwe11 Посмотреть сообщение
это что?
это ссылающийся сам на себя класс/структура.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 429
29.07.2011, 01:10     Отличия между структурами и классами #42
А примеры применений автореферентных классов какие? Скажем структуры с ссылкой для себя используют для создания списков в любом яз программирования. Это - азбука. А вот об автореферентных классах сведений гораздо меньше.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,506
29.07.2011, 01:21     Отличия между структурами и классами #43
Цитата Сообщение от eugrita Посмотреть сообщение
А вот об автореферентных классах сведений гораздо меньше.
Да в принципе всё то же самое
C++
1
2
3
4
5
6
7
8
9
10
11
12
class StringList {
    class Node {
        std::string value;
        Node * next;
    public:
        Node(const std::string & str = "") : value(str), next(0) {}
        //...
    };
    Node * first;
    Node * last;
    //...
};
Ну а что-то вроде
C++
1
2
3
4
class A {
    A a;
    // ...
};
по-моему просто нигде не скомпилируется.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
29.07.2011, 09:45     Отличия между структурами и классами #44
Еще приведу такой пример. В MSVS 2010 (про другие незнаю) если написать например struct A и сознательно сделать в ней (структуре) ошибку, то в сообщении об ошибке будет информация следующего рода:
error: Class A blablabla
Это для тех, кто думает, что структура и класс это разные вещи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2011, 02:49     Отличия между структурами и классами
Еще ссылки по теме:
Что общего и какие отличия между одномерным и двумерным массивами C++
C++ Организация общения между классами
Передача данных между классами C++
C++ Реализация отношений между классами is-a, has-a, uses-a в С++
C++ Отношения между классами и объектами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 429
30.07.2011, 02:49     Отличия между структурами и классами #45
Ну хорошо. Конструктив лишь в том, что может быть класс, содержащий указатель на себя типа
C++
1
2
3
4
class test
{
  test * a;
};
Я бы хотел не играться возможностями которых в С++ а в MSVC 10 еще больше, а получить конструктивный ответ на вопрос: в какой ситуации эта конструкция используется и незаменима?
По поводу списков говорили - там достаточно структуры. Может список объектов с частично скрытыми полями и открытыми интерфейсами? Примеры?

Добавлено через 15 минут
да кстати провел эксперимент с похожим кодом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class test
{
 public:
   static int n;
  test * a;
  test () {
     n++;
               }
};
int test::n=0;
 
int main(int argc, char* argv[])
{
test * s=new test();
int k=s->a->n ;
k=s->a->n;  //k=1
k=s->a->a->n; //k=1
k=s->a->a->a->n;//k=1
        return 0;
}
в класс введена статическая переменная n- счетчик экземпляров.
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1 . Как это объяснить? Сколько на самом деле объектов?
Yandex
Объявления
30.07.2011, 02:49     Отличия между структурами и классами
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru