Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/125: Рейтинг темы: голосов - 125, средняя оценка - 4.82
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206

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

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

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2010, 12:38
Ответы с готовыми решениями:

Отличия между классами и массивами
Уважаемые программисты объясните пожалуйста Чем отличается массивы от классов????:help::help::help::help::help::help::wall:

Отличия между классами String и StringBuilder
Расскажите пожалуйста про основные отличия между классами String и StringBuilder.

Отличия между классами для работы с интернетом
Добрый день, не могу понять ситуацию, как и для чего мелкософт расплодили дублирующие классы для работы с интернетом. Оказалось что в...

58
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Maxwe11 Посмотреть сообщение
это что?
это ссылающийся сам на себя класс/структура.
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
29.07.2011, 01:10
А примеры применений автореферентных классов какие? Скажем структуры с ссылкой для себя используют для создания списков в любом яз программирования. Это - азбука. А вот об автореферентных классах сведений гораздо меньше.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
29.07.2011, 01:21
Цитата Сообщение от 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;
    // ...
};
по-моему просто нигде не скомпилируется.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
29.07.2011, 09:45
Еще приведу такой пример. В MSVS 2010 (про другие незнаю) если написать например struct A и сознательно сделать в ней (структуре) ошибку, то в сообщении об ошибке будет информация следующего рода:
error: Class A blablabla
Это для тех, кто думает, что структура и класс это разные вещи
2
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
30.07.2011, 02:49
Ну хорошо. Конструктив лишь в том, что может быть класс, содержащий указатель на себя типа
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 . Как это объяснить? Сколько на самом деле объектов?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
30.07.2011, 05:17
Цитата Сообщение от eugrita Посмотреть сообщение
Сколько на самом деле объектов?
Один
Цитата Сообщение от eugrita Посмотреть сообщение
Как это объяснить?
Мне больше интересно, как объяснить, что этот код отработал, а не просто упал?
0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
30.07.2011, 06:31
Цитата Сообщение от eugrita Посмотреть сообщение
в класс введена статическая переменная n- счетчик экземпляров.
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1 . Как это объяснить? Сколько на самом деле объектов?
Не должен. Конструктор вызывается только при создании объекта, а не при переходах по указателю. Конструктор всего один раз вызывался, значит n только один раз увеличится на 1.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
30.07.2011, 07:24
eugrita, хочешь примеров - почитай мою книжку:
http://www.ozon.ru/context/detail/id/3515464/
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.07.2011, 09:13
Цитата Сообщение от fasked Посмотреть сообщение
как объяснить, что этот код отработал, а не просто упал?
Элементарно. К статической переменной можно получить доступ через любой мусор, приведённый к нужному типу.) Ведь this там не используется, важен только класс. Т.е. строчки 16-19 эквивалентны обращению test::n.

Добавлено через 1 минуту
Цитата Сообщение от eugrita Посмотреть сообщение
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1
Это не ссылки, а указатели - раз. Объект создаётся только в строке 15 - это два.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.07.2011, 10:47
Как по мне основное отличие классов от структур - это наличие функций и методов в классе.
Хотя структуру как классы имеют свои переменный функций и методов в них нет, они могут быть внешними но не принадлежать структуре. В этом плане структура являет собой урезанную в функциональных возможностях весию класса
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2011, 10:58
-=ЮрА=-, сюрприз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
struct hello
{
private:
    std::string person;
 
public:
    hello(const std::string&);
 
    void greet() const;
};
 
hello::hello(const std::string& p)
    : person(p)
{
}
 
void hello::greet() const
{
    std::cout << "Hello, " << person << "!" << std::endl;
}
 
 
int main()
{
    hello me("nameless");
    me.greet();
 
    return 0;
}
Тысячу раз же уже пережевывали, что структуры в C++ могут иметь и методы, и конструкторы-деструкторы, и все прочее, что имеют классы. У них лишь спецификатор доступа по умолчанию другой
1
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
30.07.2011, 11:26
Ну хорошо пусть так. А чего добился я этими вызовами? Обращения к 1 экз класса получаетcя?
Вопрос остается : в каких случаях прием использования ссылки внутри класса на самого себя эффективно работает? Его обл применения?

Добавлено через 7 минут
Ну хорошо. А чего я добился вызовом скажем
k=s->a->a->n
- обращение к тому же экземпляру переменной n? Такой синтаксис вроде возможен только
в автореферентных классах
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.07.2011, 12:42
Цитата Сообщение от eugrita Посмотреть сообщение
в каких случаях прием использования ссылки внутри класса на самого себя эффективно работает?
что значит эффективно работает? покажите тогда пример не эффективной работы тогда

Цитата Сообщение от eugrita Посмотреть сообщение
Его обл применения?
структуры данных

Добавлено через 1 минуту
Цитата Сообщение от eugrita Посмотреть сообщение
- обращение к тому же экземпляру переменной n? Такой синтаксис вроде возможен только
в автореферентных классах
такое возможно для всех статических членов
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
30.07.2011, 12:51
под словами эффективно работает понимаю некую область задач или структур данных, создание которых происходит с помощью указанного приема - автореферентного класса.
А то мы, блин изучаем разные тонкости, возможности да еще в разных версиях С++ а к чему это все прилепить - в обсуждении ручки не доходят. Вроде как чистая математика- чистое искусство
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.07.2011, 13:01
Цитата Сообщение от eugrita Посмотреть сообщение
Вопрос остается : в каких случаях прием использования ссылки внутри класса на самого себя эффективно работает? Его обл применения?
Т.е. реализации списков и подобных контейнеров в качестве ответа тебя не устроило?

Или ты не правильно понял выражение "ссылки внутри класса на самого себя"? Что непонятного в том, что объекты могут ссылаться друг на друга? Это же не ссылка объекта на себя, а ссылка на объект этого класса. Совершенно другой объект, расположенный по другому адресу.

На тебе простой пример. Есть класс окна, в нём куча контролов. Контролы это тоже окна. Т.е. Класс окна и классы контролов совпадают (благодаря полиморфизму). Поэтому в классе окна хранятся указатели на контролы, а в контролах указатели на обрамляющее их окно. И никакой математики.
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
30.07.2011, 16:12
нечто похожее есть в заданиях по программированию Бауманки:
29.Моделировать очередь (руками), в качестве элементов которой могут использоваться числа и слова. Операции: добавление элемента, удаление элемента, печать элементов. Создать класс - потомок, который содержит процедуру сортировки слов по алфавиту. ..
27.Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указан-ными структурами.
Объект - слово. Параметры: текст, длина, количество согласных букв. Методы: конструктор, определяющий поле текста и длину, и процедура, определяющая количество глас-ных букв. Определить процент гласных букв в предложении. Реализовать два варианта (с массивом и списком).
для 29. При решении 29 создавалось несколько классов TElement,TNum,TSlovo - как его дочерние, и класс TQueue...: вроде класс TElement - автореферентный (только я такого слова тогда еще не знал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class TElement
{ public:
TElement *nxt;
TElement();
 virtual ~TElement() {cout<<"Delete TElement.";}
 virtual void Print()=0;
};
  
class TQueue
{
public:
  TQueue();//конструктор
  ~TQueue();  //деструктор
  TElement *First(){return cur=first;}
  TElement *Last(){return cur=last;}
  TElement *Next(){return cur=cur->nxt;}
  void addEL(TElement *val);//добавление элемента
  void delEL(); //удаление 1 элем
  void print(); //печать всех элементов
 virtual  void printS(); //печать элементов -строк
private:
 TElement *first,*last,*cur;
 };
Да тогда все применения - разновидности списков но не просто из данных а из объектов классов
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.07.2011, 16:16
eugrita, и к чему это? это типо предложение нам решить?
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
30.07.2011, 16:23
да нет, конечно. Я их сам в свое время решил как халтура для студента. Но теперь только понял, что эта тематика задач похоже относится к обсуждаемой теме. А вы несогласны?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.07.2011, 16:25
Цитата Сообщение от eugrita Посмотреть сообщение
А вы несогласны?
согласен, только просто странно видить задание в теме, оффтоп получается)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2011, 16:25
Помогаю со студенческими работами здесь

Разница между классами и структурами и другие моменты
Добрый день! Разбираю разницу между классами и структурами, и возник следующий вопрос при создании экземпляров класса и структуры: ...

Отличия между ++value и value++
Все используют по разному, чем эти отличия отличаются друг от друга. Или ничем ?

Отличия между видеокартами
Доброго вечера форумчане! в чем отличия от Radeon R9 280X от R9 280 (без икса) сильно ли они отличаются по производительности?

Отличия между книгами
Добрый день! Решил прикупить себе Искусство программирования Кнута. Так вот... не могу понять в чем отличия серии и...

Отличия между DVD
Задали мне тут вопрос, в чем отличие между двумя этими оптическими носителями, с точки зрения физики, если у них так сильно различаются...


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

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru