реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
Golikov A.
сообщение Jul 31 2013, 07:31
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(paravozru @ Jul 29 2013, 17:48) *
Просто хочется более рационального подхода и по больше использовать возможности C++. Кстати кто какие С++ возможности использует ? например class ? знаю как работает но не знаю как полезно применить.


Классы - черные ящики с защитой работы. Они хороши не для конкретного проекта, а для повторного использования в будущих проектах или при разработке проекта группой программистов.

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

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


Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 31 2013, 07:53
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Когда-то задавлся таким вопросом, вкратце тут http://electronix.ru/forum/index.php?s=&am...st&p=384003

Впрочем я не согласен.

Цитата(Golikov A. @ Jul 31 2013, 11:31) *
включая в него старый и дублируя функции, за приватностью функций приходиться следить руками... Обращение через класс родитель к потомкам - вот единственное что не удается симулировать, но как-то обхожусь...%)

Зачем все это ? Создавайте указатели на потомков, не надо ничего дублировать. Неплохой пример имхо ядро Линукса. Чистый С со всеми признаками ООП.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 31 2013, 08:01
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Golikov A. @ Jul 31 2013, 09:31) *
Они хороши не для конкретного проекта, а для повторного использования в будущих проектах
Почему же? И в конкретном проекте можно использовать все его прелести.
QUOTE (Golikov A. @ Jul 31 2013, 09:31) *
По большей части практически все что дает класс можно реализовать на С без плюсов, последние время так и делаю. Класс у меня это отдельный файл, все переменные в нем делают с доступом через функции, все глобальное от модуля - замкнуто внутри файла и снаружи недоступно.
То есть private - члены вы реализуете через static? Как при этом вы реализуете встраиваемые (inline) функции? Как получаете sizeof() этого "класса", как заводите в других файлах экземпляры этого "класса"? Как-то не тянет на "практически все", скорее на "кое что, да и то через ж".
И зачем вообще такой велосипед с квадратными колесами если можно использовать специально созданный для этого инструмент - язык C++?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 2 2013, 10:53
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

а как в С++ инлайн сделан?
сайзоф через функцию член, например.


Да понятно что это все извращения, просто иногда нужен С, а хочется приятностей....

Наверное у меня проекты слишком маленькие, прелестей от С++ внутри одного замкнутого проекта не ощущаю...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 2 2013, 14:47
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Golikov A. @ Aug 2 2013, 12:53) *
приват можно делать не только через статик, а просто не указывать его в хедере, например.

CODE
file1.c:

int a;


file2.c:

extern int a;   // какой такой private???

file3.c:

int a;             // приятной отладки


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 3 2013, 08:55
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(Golikov A. @ Jul 31 2013, 10:31) *
Что не возможно: наследование, полиморфизм и прочие прелести С++, это приходится делать ручками, создавая новый файл, включая в него старый и дублируя функции, за приватностью функций приходиться следить руками... Обращение через класс родитель к потомкам - вот единственное что не удается симулировать, но как-то обхожусь...%)


Все можно.
Код
typedef struct{
int(*vfunc_a)(void *this);//Полиморфизм
int b;
}class_a_t;

int fa(void *this){};

//вызов "метода"
class_a_t ttt;
int class_a_func(class_a_t *this){};
class_a_func(&ttt);
//вызов "виртуального" метода ttt.vfunc_a(&ttt);

class_a_t *a_class_constructor(class_a_t *this)
{
   if(this->vfunc_a == NULL)this->vfunc_a = fa;
   return this;
}

typedef struct{
class_a_t class_a;//Наследование
int c;
}class_b_t;

можно и динамическое создание структур в "конструктор" добавить.
Вопрос только нафига этот закат солнца вручную.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 5 2013, 10:19
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Сергей Борщ @ Aug 2 2013, 18:47) *
Код
file1.c:

int a;


file2.c:

extern int a;   // какой такой private???

file3.c:

int a;             // приятной отладки


не ну не надо же самому себе засовывать... Если бы не было разницы, то чего С++ придумывать было... Немного самодисциплины и компилятор уже здорово начинает помогать.

Цитата(=F8= @ Aug 3 2013, 12:55) *
Все можно.
можно и динамическое создание структур в "конструктор" добавить.
Вопрос только нафига этот закат солнца вручную.


больше для того чтобы мозг не ржавел...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 19:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01735 секунд с 7
ELECTRONIX ©2004-2016