Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Вопрос про статические методы класса
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
kodjan kodjan вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.10.2005
По умолчанию Вопрос про статические методы класса - 13.04.2006, 19:03

Сейчас почти дописал класс "бесконечное число", перегрузил операции, и т.д... У меня в классе есть функции, которые нужны были непосредственно для перегрузки операторов (сложение, вычитаение, умножение, деление) и для доступа из вне они не нужны (такие ф-ции, как реверс строки, сравнение строк, добавление нулей) ...
Так вот вопрос: чтобы каждый создаваемый объект не нес в себе экземпляра этих функций, желательно применяется для других целей?
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 13.04.2006, 21:18

Каждый создаваемый объект и не "несет" в себе никаких функций. Если у класса есть хоть одна виртуальная функция, каждый объект этого класса "несет в себе" указатель на таблицу виртуальных функций (vmt) данного класса, сама же эта таблица - постоянна ("вшита" в код программы) и одна для всех экземпляров объектов класса. Если виртуальных фунций нет - объект вообще не несет в себе никаких ни "функций", ни указателя на vmt.
Смысл же статических функций в ином - статическая функция класса может быть вызвана без создания объекта данного класса. Примерно так:
Код:
class MyClass 
{
public:
   static int StaticFunc(int x);  // реализация не существенна....
   // revised !
};

int Func1()
{
   MyClass mc;
   int k = 12;
   returm mc.StaticFunc(k);
}

int Func2(int i)
{
   return MyClass::StaticFunc(i);   // так тоже можно!
}
А если в твоем классе есть функции, доступ к которым извне из клиентского кода не предусмотрен дизайном класса, то сам Бог велел их поместить в private - зависит от того, должны ли иметь к ним доступ наследники твоего класса) секцию класса.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#3 (permalink)) Старый
nop nop вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.03.2004
По умолчанию 13.04.2006, 23:18

Цитата:
Originally posted by Влад
[b]Каждый создаваемый объект и не "несет" в себе никаких функций. .
Что _здесь_ значит функция ?

Цитата:
Originally posted by Влад
[b]Если у класса есть хоть одна виртуальная функция, каждый объект этого класса "несет в себе" указатель на таблицу виртуальных функций (vmt) данного класса, сама же эта таблица - постоянна ("вшита" в код программы) и одна для всех экземпляров объектов класса. .
vtable это всего лишь один из способов реализации виртуальных функций. (Других способов предостаточно - например colod dispatching, pic, и т.д.)

Цитата:
Originally posted by Влад
[b]Если виртуальных фунций нет - объект вообще не несет в себе никаких ни "функций", ни указателя на vmt.
.
см. выше

Цитата:
Originally posted by Влад
[b]Смысл же статических функций в ином - статическая функция класса может быть вызвана без создания объекта данного класса. Примерно так:
Код:
class MyClass 
{
public:
   int StaticFunc(int x);  // реализация не существенна....
};

int Func1()
{
   MyClass mc;
   int k = 12;
   returm mc.StaticFunc(k);
}

int Func2(int i)
{
   return MyClass::StaticFunc(i);   // так тоже можно!
}
.
и где здесь статическая функция ?

[quote]
А если в твоем классе есть функции, доступ к которым извне из клиентского кода не предусмотрен дизайном класса, то сам Бог велел их поместить в private

"наследники" это клиентский код ?
Ответить с цитированием
  (#4 (permalink)) Старый
kodjan kodjan вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.10.2005
По умолчанию 13.04.2006, 23:24

спасиб) именно это я и хотел узнать)
Ответить с цитированием
  (#5 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 13.04.2006, 23:59

Цитата:
Originally posted by nop
[b]и где здесь статическая функция ?
Упс! Виноват, описка... должно быть:
Код:
class MyClass 
{ 
public: 
   static int StaticFunc(int x);  // реализация не существенна.... 
};
_здесь_ же "функция" значит "код функции, отдельная копия которого (кода) вставляется в каждый объект класса" - имхо, именно это имел в виду kodjan. (В терминах ассемблера объяснить это гораздо легче, хе-хе....)

Согласен, vmt - не единственная возможная реализация схемы виртуальных функций, однако - очень распространенная, не так ли?


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
BabyBear BabyBear вне форума
Member
 
Сообщений: 261
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2005
По умолчанию 14.04.2006, 00:06

2 nop
Не стоит задавать такие вопросы. Влад конкретно ответил на пост и лично мне всё понятно.
Возможно, это какая то месть за диалог в другой ветке, но она никому не интересна.
Если Вы можете, объясните в чём он не прав, это гораздо интереснее.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание класса по типу класса Oburec Delphi 1 20.09.2010 11:17
Eclipse CDT и статические библиотеки Tremr Eclipse 1 31.07.2010 14:41
Создание объектов дочернего класса из метода базового класса Jonano С/С++ 14 01.03.2010 17:40
ООП VIP6/7. Динамические и статические сущности VictorY Prolog 26 24.05.2009 22:28
Правильное подключение *.h и *.cpp модулей в с++ и статические переменные monday С/С++ 3 21.04.2008 19:51
Обеспечить ввод полей класса, создать методы для ввода и вычисления полей renara1 C++ Builder 2 29.06.2007 02:03
Доступ к переменным класса из метода класса no_NaMe Assembler 5 27.02.2007 23:37
Указатель из класса на функцию другого класса NVSarge С/С++ 3 22.02.2007 16:24
Вопрос по теории: как создать константу класса impressionist C++ Builder 2 22.01.2007 16:45
Чем отличаются методы класса Ordered Collection j-0 Smalltalk 9 15.02.2005 14:03
Классы и методы их работы в C# Rem .NET 3 05.03.2004 19:10
Вызов метода класса, не создавая при этом объекта этого класса в MessageBox LeM2003 Visual C++ 6 03.10.2003 17:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов