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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.98
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 12:38     Отличия между структурами и классами #1
Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
28.07.2011, 20:54     Отличия между структурами и классами #41
Цитата Сообщение от Maxwe11 Посмотреть сообщение
это что?
это ссылающийся сам на себя класс/структура.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
29.07.2011, 01:10     Отличия между структурами и классами #42
А примеры применений автореферентных классов какие? Скажем структуры с ссылкой для себя используют для создания списков в любом яз программирования. Это - азбука. А вот об автореферентных классах сведений гораздо меньше.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.07.2011, 09:45     Отличия между структурами и классами #44
Еще приведу такой пример. В MSVS 2010 (про другие незнаю) если написать например struct A и сознательно сделать в ней (структуре) ошибку, то в сообщении об ошибке будет информация следующего рода:
error: Class A blablabla
Это для тех, кто думает, что структура и класс это разные вещи
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
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 . Как это объяснить? Сколько на самом деле объектов?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
30.07.2011, 05:17     Отличия между структурами и классами #46
Цитата Сообщение от eugrita Посмотреть сообщение
Сколько на самом деле объектов?
Один
Цитата Сообщение от eugrita Посмотреть сообщение
Как это объяснить?
Мне больше интересно, как объяснить, что этот код отработал, а не просто упал?
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
30.07.2011, 06:31     Отличия между структурами и классами #47
Цитата Сообщение от eugrita Посмотреть сообщение
в класс введена статическая переменная n- счетчик экземпляров.
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1 . Как это объяснить? Сколько на самом деле объектов?
Не должен. Конструктор вызывается только при создании объекта, а не при переходах по указателю. Конструктор всего один раз вызывался, значит n только один раз увеличится на 1.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
30.07.2011, 07:24     Отличия между структурами и классами #48
eugrita, хочешь примеров - почитай мою книжку:
http://www.ozon.ru/context/detail/id/3515464/
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.07.2011, 09:13     Отличия между структурами и классами #49
Цитата Сообщение от fasked Посмотреть сообщение
как объяснить, что этот код отработал, а не просто упал?
Элементарно. К статической переменной можно получить доступ через любой мусор, приведённый к нужному типу.) Ведь this там не используется, важен только класс. Т.е. строчки 16-19 эквивалентны обращению test::n.

Добавлено через 1 минуту
Цитата Сообщение от eugrita Посмотреть сообщение
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1
Это не ссылки, а указатели - раз. Объект создаётся только в строке 15 - это два.
-=ЮрА=-
Заблокирован
Автор FAQ
30.07.2011, 10:47     Отличия между структурами и классами #50
Как по мне основное отличие классов от структур - это наличие функций и методов в классе.
Хотя структуру как классы имеют свои переменный функций и методов в них нет, они могут быть внешними но не принадлежать структуре. В этом плане структура являет собой урезанную в функциональных возможностях весию класса
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.07.2011, 10:58     Отличия между структурами и классами #51
-=ЮрА=-, сюрприз:
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++ могут иметь и методы, и конструкторы-деструкторы, и все прочее, что имеют классы. У них лишь спецификатор доступа по умолчанию другой
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
30.07.2011, 11:26     Отличия между структурами и классами #52
Ну хорошо пусть так. А чего добился я этими вызовами? Обращения к 1 экз класса получаетcя?
Вопрос остается : в каких случаях прием использования ссылки внутри класса на самого себя эффективно работает? Его обл применения?

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

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

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

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

На тебе простой пример. Есть класс окна, в нём куча контролов. Контролы это тоже окна. Т.е. Класс окна и классы контролов совпадают (благодаря полиморфизму). Поэтому в классе окна хранятся указатели на контролы, а в контролах указатели на обрамляющее их окно. И никакой математики.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
30.07.2011, 16:12     Отличия между структурами и классами #56
нечто похожее есть в заданиях по программированию Бауманки:
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;
 };
Да тогда все применения - разновидности списков но не просто из данных а из объектов классов
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.07.2011, 16:16     Отличия между структурами и классами #57
eugrita, и к чему это? это типо предложение нам решить?
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
30.07.2011, 16:23     Отличия между структурами и классами #58
да нет, конечно. Я их сам в свое время решил как халтура для студента. Но теперь только понял, что эта тематика задач похоже относится к обсуждаемой теме. А вы несогласны?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2011, 16:25     Отличия между структурами и классами
Еще ссылки по теме:

В чем отличия между выражением (expression) и оперетором (statement)? C++
C++ Взаимодействие между классами
Связь между 2 классами C++

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.07.2011, 16:25     Отличия между структурами и классами #59
Цитата Сообщение от eugrita Посмотреть сообщение
А вы несогласны?
согласен, только просто странно видить задание в теме, оффтоп получается)
Yandex
Объявления
30.07.2011, 16:25     Отличия между структурами и классами
Ответ Создать тему
Опции темы

Текущее время: 16:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru