Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические члены и наследование 
:(
    Опции темы
Anton Vatchenko
Дата 28.8.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Очень необходимо реализовать то, что по принципу джавы могло бы писаться как:
Код

class A {

public:
    static char visible = 1;
};

class B : public A {

public:
    static char visible = 0;
};

class C : public A {

};

A a;
a.visible - 1
B b;
b.visible - 0
C C;
c.visible - 1


Это сообщение отредактировал(а) Anton Vatchenko - 28.8.2008, 15:14


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Код

class A 
{
public:
    char visible;

    A():
      visible(1)
    {};
};

class B : public A 
{
public:
    static char visible;

    B() {};
};

class C : public A 
{
public:
    C() {};
};

char B::visible = 0;

int main()
{
    A a;
    B b;
    C c;

    return 0;
}


Добавлено через 1 минуту и 2 секунды
Только непонятно зачем данные-члены делать public. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 28.8.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Пардон, забыл статик в первом классе... А публичные - чтобы видеть извне.


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 28.8.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Anton Vatchenko @  28.8.2008,  15:14 Найти цитируемый пост)
 А публичные - чтобы видеть извне.

это и есть принципы джавы? smile

небольшая "лекция"
в любом ООП языке не рекомендуется делать переменные-члены публичными
если нужно - сделай функции геттер и сеттер для нужных переменных
а если уж совсем ООП следовать, то переменные - это часть реализации и юзер класса вообще не должен знать о их существавонии и работать только через функции (для того в джаве интерфейсы и ввели)


--------------------
user posted image    user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Вообще, лучше бы уточнить, чего конкретно ты хочешь добиться. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 28.8.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Вообще в любом ооп по лекциям требуется писать так, чтобы было красиво и медленно. Есть места, где такого делать не стоит (не все же сводится к офисным приложениям).

А требуется делать так, чтобы у меня были объекты N разных типов (у меня N классов). Некоторые объекты visible, некоторые нет (ясно что visible относится к классам, поэтому если объекты относятся к одному классу, они все видимые скажем). Большинство видимые, поэтому главный класс visible = 1, и лишь в некоторых visible = 0.

Чтобы потом экземпляр.visible возвращал правильные значения.


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Anton Vatchenko @  28.8.2008,  15:44 Найти цитируемый пост)
Есть места, где такого делать не стоит (не все же сводится к офисным приложениям).


Т.е. ты утверждаешь, что если сделать все данные-члены открытыми, то приложение будет работать быстрее? Ты не прав. Простейшие геттеры заменяются прямым обращение самим компилятором при оптимизации по скорости. К тому же есть inline. 


Цитата(Anton Vatchenko @  28.8.2008,  15:44 Найти цитируемый пост)
А требуется делать так, чтобы у меня были объекты N разных типов (у меня N классов). Некоторые объекты visible, некоторые нет (ясно что visible относится к классам, поэтому если объекты относятся к одному классу, они все видимые скажем). Большинство видимые, поэтому главный класс visible = 1, и лишь в некоторых visible = 0.


Здесь нельзя использовать static-данные. Они ведь общие для всех объектов. Скажем, будет у тебя 9 видимых объектов класса A, один ты решишь сделать невидимым, обнулив переменную visible. В итоге получишь, что все объекты, так или иначе, связанные с этой переменной станут невидимыми.

Создай простой флаг visible типа bool, размести его в private секции и работай как обычно. Что тебя смущает то?

Это сообщение отредактировал(а) W4FhLF - 28.8.2008, 16:08


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 28.8.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Так я ж сказал что все объекты одного типа либо видимые, либо нет. Другими словами изначально (то есть const) известно, что (возьму пример уже свой) косяк рыбы невиден для игрока (так как под водой), а дерево видимое. Ну хоть косяки окуней, хоть лосося, хоть в море хоть в реке - они все РЫБА, и они невидимые, а деревья хоть дуб хоть еще что-то - все ДЕРЕВЬЯ, и они видимые.


--------------------
user posted image
PM MAIL   Вверх
Lycifer
Дата 28.8.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Цитата

это и есть принципы джавы? smile

небольшая "лекция"
в любом ООП языке не рекомендуется делать переменные-члены публичными
если нужно - сделай функции геттер и сеттер для нужных переменных
а если уж совсем ООП следовать, то переменные - это часть реализации и юзер класса вообще не должен знать о их существавонии и работать только через функции (для того в джаве интерфейсы и ввели)


Интерестно кто такое сказал что "не рекомендуется", стандарт С++?
вообще давайте подумаем почему член класса делать public не гуд
 - Пользователь класса может изменить содержание членов класса, и не более того, так вот 
Anton Vatchenko , привел пример где пользователь менят содержимое поля класса (visible) что в этом плохого?
Может быть потому что он не делал вызов функции? smile 
PM MAIL ICQ   Вверх
Alek86
Дата 28.8.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lycifer @  28.8.2008,  16:14 Найти цитируемый пост)
Интерестно кто такое сказал что "не рекомендуется"

кроме стандарта есть еще куча литературы от неглупых людей + собственный опыт
заново объяснять, чем хороша инкапсуляция, не очень хочется
достаточно доступно объяснено в Новых сложных задачах на C++ Саттера (задача 17)


--------------------
user posted image    user posted image
PM MAIL   Вверх
Anton Vatchenko
Дата 28.8.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Люди, не спорьте. Просто объясните как реализовать то, что я указал.


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 28.8.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Lycifer @  28.8.2008,  16:14 Найти цитируемый пост)
вообще давайте подумаем почему член класса делать public не гуд

Так уже тысячу раз об этом передумано..
Объект должен сам руководить своими внутреннеми процессами, а не полагаться на внешнее управление. 
Открытые переменные говорят об незакончености объекта.  Кастати объект состояших из Гетеров и Сеттеров тоже плох. 
В таком случае он объект, а блок данных.  Даже просто поняв разницу между двумя последними понятиями , можно почуствовать проблему открытых членов.
А сводится все к тому что, если реализация класса выполнена приватно, то все связи находятся в одной локальной области и легки для проверки и контроля.
Если объект предоствляет открытый доступ к реализации, то она расползается по всему коду программы и любая модификация исходника с каждым таким шагом сильно затрудняется... И не только модификация, но и просто понимание проги.
ООП чем и хорош что предполагает что каждый объект можно протестировать(и понять) без участия остальных.
Естественно , чем меньше  связей тем легче .. 




--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 28.8.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Anton Vatchenko @  28.8.2008,  16:13 Найти цитируемый пост)
Так я ж сказал что все объекты одного типа либо видимые, либо нет. Другими словами изначально (то есть const) известно, что (возьму пример уже свой) косяк рыбы невиден для игрока (так как под водой), а дерево видимое. Ну хоть косяки окуней, хоть лосося, хоть в море хоть в реке - они все РЫБА, и они невидимые, а деревья хоть дуб хоть еще что-то - все ДЕРЕВЬЯ, и они видимые.


Ну ок. Делай несколько базовых классов(рыба, дерево), которые хранят static-флаг visible. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alek86
Дата 28.8.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Anton Vatchenko @  28.8.2008,  16:27 Найти цитируемый пост)
Люди, не спорьте. Просто объясните как реализовать то, что я указал.

виртуальная ф-я  IsVisible

Код

class A {
public:
    virtual bool IsVisible() { return true; }
};

class B : public A {

public:
    virtual bool IsVisible() { return false; }
};

class C : public A {
    virtual bool IsVisible() { return true; }
};



--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 28.8.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anton Vatchenko @  28.8.2008,  15:44 Найти цитируемый пост)
Вообще в любом ооп по лекциям требуется писать так, чтобы было красиво и медленно. 

Нет.. глядеть надо не стороны лекций, а со сторны инструментария предоставляемго языком.. ООП помогает писать так, чтоб это было красиво, понятно и при этом без ушерба в скорости...
Например казалось бы что программа написанная в машиных кодах будет работаь быстрей, чем такая же прога на Си,
однако зачастую наблюдается обратная ситуация.. Потому что чтоб выйграть в скорости при писании в маешинах кодах, надо знать архитектура компа  и сопотимизировать под нее свою лучше, чем это сделает компилятор..(а сравниться с компиляторами, особенно заточенными под нужную платформу, смогут лишь единицы). То же происходит если сравнить С и Сpp.. При компиляции весь ооп разворачивается и в результате имеем тот же си код . Зато при составлении, инструментарий ООП позволяет значительно снизить нагрузку с программиста, если он правильно его использует.
То есть имеем те же пряники, но за меньшее время и с меньшей головной болью..

Добавлено через 2 минуты и 41 секунду
Цитата(Anton Vatchenko @  28.8.2008,  16:27 Найти цитируемый пост)
Люди, не спорьте. Просто объясните как реализовать то, что я указал. 

Цитата(Anton Vatchenko @  28.8.2008,  14:52 Найти цитируемый пост)
Очень необходимо реализовать то, что по принципу джавы могло бы писаться как:

нельзя ли объяснить что именно Вы хотите..
потому как например в этой строчке
Цитата(Anton Vatchenko @  28.8.2008,  14:52 Найти цитируемый пост)
a.visible - 1

найти смысл очень сложно ... 


--------------------
PM MAIL WWW   Вверх
mes
Дата 28.8.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



...

Это сообщение отредактировал(а) mes - 28.8.2008, 16:46


--------------------
PM MAIL WWW   Вверх
Anton Vatchenko
Дата 28.8.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Вот о скорости... Пример последний - это вызов функции isVisible. Будет ли эффективно, если мне нужно обработать 1 млн объектов, в цикле вызывать эту функцию? Может конечно сделать inline, но вот интересно к какому виду это приведет интерпретатор (как кто-то тут говорил "С++ код все равно приводится к Си")...


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 28.8.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Anton Vatchenko @  28.8.2008,  16:51 Найти цитируемый пост)
Вот о скорости... Пример последний - это вызов функции isVisible. Будет ли эффективно, если мне нужно обработать 1 млн объектов, в цикле вызывать эту функцию? 

да, будет, так как все это дело соптимизируется


хотя тут особо оптимизироваться нечему... возврат значения...

Добавлено через 2 минуты
кстати, почему бы тебе самому не попробовать сравнить?

Это сообщение отредактировал(а) Alek86 - 28.8.2008, 16:55


--------------------
user posted image    user posted image
PM MAIL   Вверх
Anton Vatchenko
Дата 28.8.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Сравнивал... Обычный цикл работает на 10% медленнее с этим isVisible что с inline что без. А вот взятие значения из памяти быстрее...


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



И как ты сравнивал?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 28.8.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Код

#include <stdio.h>
#include <windows.h>

int a[10000000];
int n = 10000000;

inline int get(int i) {
    return a[i];
}

void main() {
    DWORD sum = 0;
    for(int j = 0; j < 100; j++) {
        int cnt = 0;
        DWORD t = GetTickCount();
        for(int i = 0; i < n; i++) {
            if(get(i) < 1000)
                cnt++;
        }
        printf("%d %d\n", cnt, sum += (GetTickCount() - t));
    }
}


Вот код... Если get(i) заменить на a[i], то работает за 3 секунды. А в приведенном варианте 63 секунды. Это если голый пример (у меня разница на 10%, а тут раз в 20).


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Если выставить сборку Release в студии и установить Optimization: Maximize Speed (/O2), то оба варианта имеют одинаковое время исполнения.

Посмотрел ассемблерный листинг. В обоих случаях выходит один и тот же машинный код. 

Это сообщение отредактировал(а) W4FhLF - 28.8.2008, 17:42


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
mes
Дата 28.8.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250




Цитата(Anton Vatchenko @  28.8.2008,  17:30 Найти цитируемый пост)
Вот код... Если get(i) заменить на a[i], то работает за 3 секунды. А в приведенном варианте 63 секунды. 


с включенной оптимизацией результат в обоих случаях 2578 тиков
5719 с прямым доступом  и 9063 через get()

итог > разрешите компилятору соптимизировать вместо того чтоб мучиться самому  smile 



--------------------
PM MAIL WWW   Вверх
Anton Vatchenko
Дата 28.8.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Ну не все же пишут в виндовсе...


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Anton Vatchenko, ну твой то код определённо под винду smile И это не от оперционки зависит, а от компилятора и умения его настроить. Если есть желание писать вместо кода кашу и делать monkeyjob за компилятор, то это личное дело каждого. Просто это глупо smile 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
vinter
Дата 28.8.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



За что люблю Сишников, вооружатся стандартом  и умными книжками и с рвением святой инквизиции доказывают всем мнение чужого дядьки  smile 
public перменные маст хэв, не надо от них чуратся как от прокаженных. Если надо, значит юзай.
Кстати очень интересная позиция замены паблик переменных сетами и гетами, если есть сеты и геты для переменной то это уже нарушение инкапсуляции, так что тут не важно как это выглядит, через методы, либо напрямую. Все одно. Правда напрямую меньше букофф, так что выбирать надо то, что удобно, а не то, что дядьки чужие насоветовали smile В конце концов программирование это искусство, а не писание по шаблонам.


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 28.8.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
public перменные маст хэв, не надо от них чуратся как от прокаженных. Если надо, значит юзай.

конечно да, если только программист отдает себе отчет, зачем он этои делает..
если он не понимает разницы между публичной и приватной переменной, то лучше пусть делает приватной .. Так хоть через некоторое время накопится опыт и придет осознание. То же касается и Гетеров. Начинать инкапсуляцию можно начинать с них, остальное  с опытом.. главное стремится. 
Кажется если спрятать реализацию, это усложняняет разработку программы. Да действительно для локальной области все это добавляет затруднений. Однако если смотреть на прогу со стороны- то программа разработаная с учетом приватной реализации собрана из кубиков - где каждый отдельный кубик можно протестировать, и расширить ему функциональность. Программа же с открытой реализацией похожа на кашу, где все переплетено и выделить оттуда определенную сушность очень трудно даже для понимания, не говоря о поддержки и расширеннии функциональности..

Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
Правда напрямую меньше букофф, так что выбирать надо то, что удобно, а не то, что дядьки чужие насоветовали  В конце концов программирование это искусство, а не писание по шаблонам. 

Но чтоб преуспеть в искустве надо слушать, что эти чужие дядьки советуют, анализировать, пробавать, понимать и в конце концов принимать решение уже своей головой в каждом конкретном случае


--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 29.8.2008, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
Кстати очень интересная позиция замены паблик переменных сетами и гетами, если есть сеты и геты для переменной то это уже нарушение инкапсуляции


Хм... Где здесь нарушение? Разве взаимодействие с интерфейсом считается нарушением инкапсуляции? 





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
vinter
Дата 29.8.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(W4FhLF @  29.8.2008,  07:52 Найти цитируемый пост)
Хм... Где здесь нарушение? 

ты открыл доступ к внутреннему состоянию, интерфейс\напрямую не важно, важно то, что пользователь получает доступ. А это нарушение.


--------------------
Мой блог
PM MAIL WWW   Вверх
Ches
Дата 29.8.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 19.8.2008

Репутация: нет
Всего: 3



Цитата(mes @  28.8.2008,  19:41 Найти цитируемый пост)
если он не понимает разницы между публичной и приватной переменной, то лучше пусть делает приватной 

то пусть почитает еще книжек, потому как  инкапсуляция - часть фундамнтальной основы ООП.

Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
выбирать надо то, что удобно

Цитата(vinter @  29.8.2008,  08:53 Найти цитируемый пост)
крыл доступ к внутреннему состоянию, интерфейс\напрямую не важно, важно то, что пользователь получает доступ. А это нарушение.

Нужно понимать, что приватная переменная + методы доступа к ней = паблик переменная, за исключением случая, когда в set() например нужно организовать проверку значения ну или какие-либо дополнительные манипуляции


PM MAIL ICQ   Вверх
W4FhLF
Дата 29.8.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



vinter, так весь смысл в том, что доступ через интерфейс контролируемый при любой операции, связанной с внутренним состоянием объекта. Это не нарушение(если не впадать в абсолютизм). 

Геттеры/сеттеры инкапсулируют внутреннюю структуру объекта и позволяют осуществить контроль доступа, т.е. инкапсулируют правила по которым доступ должен быть осуществлён(проверка границ, типа, размеров etc.)

Это сообщение отредактировал(а) W4FhLF - 29.8.2008, 09:42


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
vinter
Дата 29.8.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(W4FhLF @  29.8.2008,  10:39 Найти цитируемый пост)
позволяют осуществить контроль доступа, т.е. инкапсулируют правила по которым доступ должен быть осуществлён(проверка границ, типа, размеров etc.)

с этой частью я согласен. Ты видимо меня не понял, я говорил о внутренней перменной, для которой есть гет\сет просто как return\=, т.е это то же самое, что паблик, но типо скрыто за интерфейс. Я говорил об этом.


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  08:53 Найти цитируемый пост)
ты открыл доступ к внутреннему состоянию, интерфейс\напрямую не важно, важно то, что пользователь получает доступ. А это нарушение.

если это внутреннее состояние, то геты и сеты должны отсутствовать
если же это типа шарпового Свойства, то геты и сеты пишутся только так. и ничего не нарушают.

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

Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
За что люблю Сишников, вооружатся стандартом  и умными книжками и с рвением святой инквизиции доказывают всем мнение чужого дядьки  

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


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 29.8.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  29.8.2008,  11:02 Найти цитируемый пост)
если же это типа шарпового Свойства, то геты и сеты пишутся только так. и ничего не нарушают.

а я говорю нарушают, и кто прав?

Цитата(Alek86 @  29.8.2008,  11:02 Найти цитируемый пост)
поскольку через год реализация этого класс может так поменяться, что и переменной, скрывающейся за гетом и сетом, уже не будет.

и что? паблик переменная точно так же пропадет, разница в чем?


--------------------
Мой блог
PM MAIL WWW   Вверх
W4FhLF
Дата 29.8.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Alek86 @  29.8.2008,  10:02 Найти цитируемый пост)
если это внутреннее состояние, то геты и сеты должны отсутствовать


Т.е.? Что такое по-твоему внутреннее состояние? Ну допстим свойство visible объекта характеризует его внутреннее состояние. Почему геты и сеты здесь должны отсутсововать?


Цитата(vinter @  29.8.2008,  09:56 Найти цитируемый пост)
т.е это то же самое, что паблик, но типо скрыто за интерфейс. Я говорил об этом.


Ты ещё сказал, что паблик переменные маст хэв когда они нужны. А когда они нужны-то? 

Кроме случаев с простейшими структурами-классами типа:

Код

struct Point
{
public:
    Point() {};
    Point(unsigned nx, unsigned ny):
      x(nx), y(ny)
    {};

    unsigned x;
    unsigned y;

};


Ничего придумать не могу.





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 29.8.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Подождите, кто сказал что мой код под винду? Он под линуксом работает, вот только хочу узнать как сделать, чтобы работал правильно...


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 29.8.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  10:20 Найти цитируемый пост)
а я говорю нарушают, и кто прав?

я smile
шарповое свойство - это внешнее состояние объекта.
и при его изменении на самолм деле вызывается функция, которая помимо изменения переменной (внутреннего свойства) может делать еще кучу полезных вещей.
если же это реализовать с помощью публичной переменной, то такой автоматизации не добьешься

к примеру есть класс Квадрат
Код
class Square {
public:
 size_t Side() const { return m_side; }
 void Side(side_t side) { m_side = side; }
private:
 size_t m_side;
};

ты, конечно же, сделаешь просто структуру
Код
struct Square {
 size_t m_side;
};


потом окажется, что у этого класса(структуры) нужно часто использовать размер для подсчета площади. при том, что размеры квадратов меняются не так часто.
я, для оптимизации, напишу так
Код
class Square {
public:
 size_t Side() const { return m_side; }
 void Side(side_t side) { m_side = side; m_surface_area = m_side * m_side;}
 size_t SurfaceArea() const { return m_surface_area; }
private:
 size_t m_side;
 size_t m_surface_area;
};

что сделаешь ты?

Это сообщение отредактировал(а) Alek86 - 29.8.2008, 10:38


--------------------
user posted image    user posted image
PM MAIL   Вверх
W4FhLF
Дата 29.8.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Anton Vatchenko, тестовый пример, на котором ты измерял скорость, под винду. А как сделать правильно тебе уже показали. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alek86
Дата 29.8.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Anton Vatchenko @  29.8.2008,  10:27 Найти цитируемый пост)
Он под линуксом работает, вот только хочу узнать как сделать, чтобы работал правильно...

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


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 29.8.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(W4FhLF @  29.8.2008,  11:21 Найти цитируемый пост)
А когда они нужны-то? 

не могу сходу пример привести, просто я не отметаю их использование совсем, т.е если надо, значит надо.
Глупый конечно пример, НО Синглтон.
Цитата(Anton Vatchenko @  29.8.2008,  11:27 Найти цитируемый пост)
Подождите, кто сказал что мой код под винду? Он под линуксом работает, вот только хочу узнать как сделать, чтобы работал правильно...

разницы нет, в Винде С++ ничем не отличается smile

Добавлено через 3 минуты и 41 секунду
Alek86, я сделаю через КЭШ, Get для площади кеширует вычисление, т.е не вычисляет, если уже вычислен. Хотя конкретно в данном примере это роли не играет.
Set это Set, почему в Set происходит вычисление сторонней переменной? это не гут.


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  10:36 Найти цитируемый пост)
Глупый конечно пример, НО Синглтон.

обычно его реализуют с помощью статичесткой ф-ии GetInstance()...


кстати, как во всяком правиле, тут (неиспользование паблик переменных) есть исключения
и в приведенной задаче в книге Саттера они описываются.
и их процент очень мал (думаю, меньше одного)


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 29.8.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  29.8.2008,  11:41 Найти цитируемый пост)
обычно его реализуют с помощью статичесткой ф-ии GetInstance()...

я имел ввиду данные которые Синглтон хранит, а не экземпляр


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  10:36 Найти цитируемый пост)
Set это Set, почему в Set происходит вычисление сторонней переменной? это не гут.

set - это set для юзера
а прогер может писать там все, что посчитает нужным для ускорения или упрощения вида класса
там может со временем вообще 10 переменных меняться (если того потребуют обстоятельства).
в этом и заключается вся прелесть инкапсуляции + отделения интерфейса от реализации класса

Цитата(vinter @  29.8.2008,  10:36 Найти цитируемый пост)
Alek86, я сделаю через КЭШ, Get для площади кеширует вычисление, т.е не вычисляет, если уже вычислен. Хотя конкретно в данном примере это роли не играет.

можно в коде? вроде его не так уж и много

Добавлено через 1 минуту и 18 секунд
Цитата(vinter @  29.8.2008,  10:44 Найти цитируемый пост)
я имел ввиду данные которые Синглтон хранит, а не экземпляр

тоже не совсем понял...
синглтон в GetInstance возвращает ссылку(указатель) на экземпляр класса
какие там данные публичные?


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 29.8.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

class Square {
public:
 size_t Side() const { return m_side; }
 void Side(side_t side) 
 {
      m_side = side; 
      m_bSurCache = false;
 }
 size_t SurfaceArea() const 
{ 
    if( !m_bSurCache )
   {
       m_surface_area = m_side * m_side;
       m_bSurCache = true;
    }
    return m_surface_area;
 }
private:
 size_t m_side;
 size_t m_surface_area;
 bool m_bSurCache;
};

Цитата(Alek86 @  29.8.2008,  11:48 Найти цитируемый пост)
синглтон в GetInstance возвращает ссылку(указатель) на экземпляр классакакие там данные публичные?

Singleton можно использовать как глобальное хранилище параметров, вот там много паблик переменных.
Цитата(Alek86 @  29.8.2008,  11:48 Найти цитируемый пост)
set - это set для юзераа прогер может писать там все, что посчитает нужным для ускорения или упрощения вида класса

согласен, но толлько если там простейшие операции, если идут математические вычисление, то это не гут. Пользователь делает Set, он не просит вычилить площадь, она ему может никогда не понадобиться.



--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



vinter, а теперь посморти на свой код и мой

если программист А использует мой код, а программист Б - твой, то у какого программиста будет меньше всего проблем при изменении класса Square (или структуры на класс)?

Добавлено через 36 секунд
придирка
bool m_bSurCache; должен быть mutable


--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 29.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  29.8.2008,  10:20 Найти цитируемый пост)
если же это типа шарпового Свойства, то геты и сеты пишутся только так. и ничего не нарушают.

а я говорю нарушают, и кто прав?

Код

class DC
{
  public:
   Pixel GetPixel (..) const;
   void  SetPixel (..)
  ...
};

class PixelArray
{
 public:
   Pixel GetPixel (..) const;
   void  SetPixel (..)
 private:
    Pixel  ** m_screen;
};


нарушает ?


Это сообщение отредактировал(а) mes - 29.8.2008, 11:31


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  11:06 Найти цитируемый пост)
Пользователь делает Set, он не просит вычилить площадь, она ему может никогда не понадобиться.

я привел пример, когда стороны квадратов меняются редко а площади требуются часто


--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 29.8.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alek86 @  29.8.2008,  10:02 Найти цитируемый пост)
есть еще собственный опыт мучения при рефакторинге кода, отладке, обнаружении багов... 

 smile 


--------------------
PM MAIL WWW   Вверх
vinter
Дата 29.8.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  29.8.2008,  12:28 Найти цитируемый пост)
если программист А использует мой код, а программист Б - твой, то у какого программиста будет меньше всего проблем при изменении класса Square (или структуры на класс)?

проблема изменения не показатель эффективности, представь что вместо вычисления площади идет вычисления обратной матрицы через LUP разложение, ты это тоже во все change методы запихнешь? Все зависит от конкретной задачи, мне ближе cache идеология. 
К тому же я не вижу, проблем в изменении моего класса.



--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 29.8.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(W4FhLF @  29.8.2008,  10:21 Найти цитируемый пост)
Ты ещё сказал, что паблик переменные маст хэв когда они нужны. А когда они нужны-то? 

Кроме случаев с простейшими структурами-классами типа:

структуры (не по слову struct , a по смыслу) - это блок данных , который не имеет  внутреннего состояния , а только внешнее..
В таких случаях инкапсулировать просто нечего 


--------------------
PM MAIL WWW   Вверх
vinter
Дата 29.8.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(mes @  29.8.2008,  12:29 Найти цитируемый пост)
нарушает ?

нет, а вот  меняем название класса на
Код


class Matrix
{
 public:
   Pixel GetElem (..) const;
   void  SetElem (..)
 private:
    int  ** m_screen;
};

и получаем нарушение инкапсуляции.


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 29.8.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  29.8.2008,  11:33 Найти цитируемый пост)
проблема изменения не показатель эффективности,


Показатель !

"Проблема изменения" не фактическое выражение , а условное.. Совсем не обязательно "надеяться", что класс будет когда то изменен.
Оно говорит   о том  насколько клиент посвяшен в дела сервера и этим показывает связь реализации.
Чем меньше связь , тем больше сил и памяти остается у программиста на остальные проблемы .

Добавлено через 5 минут и 22 секунды
Цитата(vinter @  29.8.2008,  11:36 Найти цитируемый пост)

нет, а вот  меняем название класса на

Поэтому и надо понимать какую сущность Вы реализуете.. и от этого зависит применение инструментария.
Геттер в чистом виде это не функция Get..() , а функция возврашая не  внутренне состояние, а одну из его составляюших реализации этого состояния. (что и вынуждает повышеное знание об устройстве на стороне клиента )

Добавлено через 13 минут и 7 секунд
Цитата(vinter @  29.8.2008,  11:33 Найти цитируемый пост)
К тому же я не вижу, проблем в изменении моего класса.

Представьте что Вы написали операционную систему, которой пользуются милионы. Но потом обнаружилась что реализация у некоторых сущностей  не очень эфективная (или  не работает на определенной платформе) .. Если реализация скрыта , то Вы ее подправили и милионы пользователей с благодарностью используют ее дальше и в новых направлениях.. А если нет.. страшно подумать... Для следуюшей версии все накопленное ПО нужно переписывать.. Да с масштабом я может быть и загнул, но подобная ситуация наблюдается и в пределах одной проги 
(конечно вышеупомянутое не сильно относится к проге из тысячи строк или если она одноневка)


--------------------
PM MAIL WWW   Вверх
Lycifer
Дата 4.9.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



class A
{
int Get_someElment() {return someElment; }
private:
int someElment;
.
.
.
};

class B
{

public:
int someElement;
.
.
.
};

someFunction()
{
A objA;
B objB;

objB.someElement =10;

memcpy((void*)&objB, (void*)&someElement,sizeof(objB));
}


Результат такой каманды:
objA.Get_someElment();


Так что приватные члены делать не особого смысла

PM MAIL ICQ   Вверх
mes
Дата 4.9.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Lycifer @  4.9.2008,  18:27 Найти цитируемый пост)


Так что приватные члены делать не особого смысла


не совсем понял чего Вы добивались показать своим примером? 

То что можно применить хак и добыть данные из объекта, которые являются приватными?
Да можно.
Только Вы забываетесь , если думаете что ограничение доступа , призвано уберечь данные от повреждения
средствами хака. Хак на то и хак - компилятор умывает руки и вся ответственность перекладывается на программиста.

Этот инструментарий  (ограничение доступа ) призван "всего лишь" облегчить жизнь программиста, указывая на ошибки использования,
ориентируясь на описание класса которое дал сам программист. 
То есть:
Чем правильнее выявит интерфейс, тем легче ему будет использовать его в дальнейшем. 
Чем лучше будет изолирована реализация, тем меньше придется программисту задумываться о том как подключить данную сущность к общему коду. 
Чем меньше будет внешних связей, тем легче выявить и локализировать ошибку/баг.
И многое другое..

Программистам которые  уверенны, что их память предназначена для того, чтоб  держать в голове номер смещения и размер переменной,
перечисленные выше средства компилятора абсолютно не нужны.. Мне только не понятно зачем они выбрали С++, когда на ассемблере 
или хотя бы си простор для самостоятельного контроля без помощи компилятора гораздо шире.



Это сообщение отредактировал(а) mes - 4.9.2008, 21:59


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1938 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.