Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #80 : Март 18, 2008, 05:13:17 » |
|
vimmaxMicrosoft Visual Studio 2008 генерит байт-код, исполняемый виртуальной машиной. Это обеспечивает кроссплатформенность на уровне скомпилированного кода(!). Такое приложение может быть запущено на любой ОС, для которой есть реализация это виртуальной машины. Хотя Микрософт для win-платформ предлагает .NET Framework, существуют и реализации под другие платформы, в том числе и в рамках open source-инициатив. К примеру, реализация .NET - Mono поддерживает(как обещается) Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #81 : Март 19, 2008, 08:16:19 » |
|
Подскажите, пожалуйста. кто знает, что будет в такой ситуации: class A { int a; };
class B { int a; };
class AB: public A, public B { };
Получается множественное наследование класса AB от классов A и B. Но ведь A и B содержат один общий атрибут: int a. Какой из них будет унаследован ?
|
|
|
Записан
|
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #82 : Март 19, 2008, 08:22:34 » |
|
я, конечно, не знаток С++, но все же... я бы, перед тем как задавать такой вопрос, попробовал запустить этот код и посмотреть что же будет. задай атрибутам разные значения, а потом в классе АВ просто выведи AB::a на экран...
ЗЫ: поправте плиз, если я гоню...
ЗЗЫ: и вопрос автору вопроса -- расскажи плиз как ты сам пытался найти ответ на вопрос.
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #83 : Март 20, 2008, 07:15:48 » |
|
Подскажите, пожалуйста. кто знает, что будет в такой ситуации: class A { int a; };
class B { int a; };
class AB: public A, public B { };
Получается множественное наследование класса AB от классов A и B. Но ведь A и B содержат один общий атрибут: int a. Какой из них будет унаследован ? Оба. Только в твоём примере из наследника ты к ним не доберешься, ибо они private у родителей.
|
|
« Последнее редактирование: Март 20, 2008, 08:06:30 от EvilMax »
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #84 : Март 20, 2008, 08:14:51 » |
|
Предупреждение с artem90 снято, тему подчистил.
Хочу предупредить всех: вы видели, что бывает за флуд и разборки в тематическом форуме. То что предупреждение было сразу снято, это исключение, которое в данной теме не повторится. Давайте заниматься здесь C/C++
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #85 : Март 20, 2008, 10:44:46 » |
|
При этом если модифицировать слегка код class A { public: int a; };
class B { public: int a; }; class AB: public A, public B { };
И попробовать где-нибудь в программе обратиться к унаследованому свойству следующим образом: Возникнет ошибка. Ввиду неоднозначности. Необходимо явно указывать к какому а (к унаследованному от какого класса) происходит обращение Где то так: AB obj; obj.A::a = 10; obj.B::a = 15;
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #86 : Март 20, 2008, 11:58:18 » |
|
Да, LazarusLong верно ответил. Аналогичный пример был в лекции, но только с методами (так как "светить" внутренним устройством класса не рекомендуется). Наследники содержат полные копии всех своих предков. Единственное - к чему-то нет доступа из-за ограничений области видимости. В данном примере показано, что унаследованы оба атрибута, но из-за неоднозначности с именем необходимо явно указывать тип базового класса при обращении.
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #87 : Март 23, 2008, 01:04:57 » |
|
Товарищи, кто-то может мне подсказать, в C++ выделение памяти в куче происходит оператором new, его аналог в С - malloc() или calloc(). А вот перераспределить память чем можно? В С, например, я юзал realloc(), а в C++ что-то подобное есть?
|
|
|
Записан
|
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #88 : Март 23, 2008, 03:17:32 » |
|
artem90Функция calloc() принимает два параметра: число ячеек массива, под которые надо выделить память, и размер этой ячейки в байтах; делает эта функция следующее: выделяет нужное количество памяти (непрерывный кусок) и обнуляет все значения в нём. Си++ - Викиучебникmalloc() просто выделяет память, но не очищает значения в участке памяти. Важное отличие оператора new от функции malloc() заключается в том, что он возвращает значение типа "указатель-на-объект" (то есть MyClass *), в то время как функция malloc() - "указатель-на-что-угодно" (void *).
|
|
|
Записан
|
|
|
|
TARAKAN
Tifon
Бакалавр
Карма: +0/-0
Offline
Пол:
Сообщений: 134
|
|
« Ответ #89 : Март 24, 2008, 08:42:57 » |
|
class asd { private: int flag; public: qwe(int flag1); };
asd::qwe(int flag1): flag(flag1) { //... }
В qwe передается просто число т е qwe(1); Выдает Error C2550 http://msdn2.microsoft.com/en-us/library/e1d7ee6d(VS.71).aspxА если вот так asd::qwe(int flag1) { flag=flag1; } то все нормально... в MSDN понимаю ошибку, но не вижу такую же у себя З.Ы. Гуглить пробывал, но толкового ничего нету, в MSDN самое полезное оказалось ...
|
|
|
Записан
|
Студент: По моему легче использовать printf... EvilMax: Зато cout - это тру! = ))
|
|
|
vimmax
Mодератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #90 : Март 24, 2008, 08:50:42 » |
|
TARAKAN а в чем проблема? MSDN сказано: "'identifier' : constructor initializer lists are only allowed on constructor definitions" = листы инициализации разрешены только в конструкторах. Метод qwe конструктором не является, поэтому первый пример неправильный.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Сис_Одмин
тру одмин
Cтудент
Карма: +4/-0
Offline
Пол:
Сообщений: 67
ИУС-07а
|
|
« Ответ #91 : Март 30, 2008, 09:22:22 » |
|
переопределение и перегрузка оператора это одно и тоже?
|
|
|
Записан
|
йа не програмист, йа одмин cout-это тру! (с)EvilMax
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #92 : Март 30, 2008, 09:59:15 » |
|
Сис_Одмин, да.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #93 : Март 31, 2008, 09:28:27 » |
|
Кто знает, объясните пожалуйста, в чем проблема. У меня компилятор Borland C++ 3.11. Я решил поэкспериментировать с типами данных с плавающей точкой, набрал простейший код: #include <iostream.h>
void main() { float a; a=50*1000; cout<<a; } Результат: -15536 Я вообще-то ожидал увидеть 50000. В чем причина, ведь для типа float диапазон экспонент ограничен в пределах от -37 до +37. Число 50000 уж точно лежит в этом диапазоне. К тому же тип float гарантиркет 6 значащих цифр, а в числе 50000 только 1 цифра явл. значащей. Так что вроде бы все должно быть ок. Подскажите, пожалуйста в чем проблема, в компиляторе или я напорол чего нить (Отправлено в: 31 Марта 2008, 20:35:09)Ошибку нашел, не хватало явного приведения целочисленных констант к вещественному типу: или так: Но все таки старенький Борланд 3.11 сыграл злую шутку, ведь на Борланде 6 все работало изначально хорошо. Ведь явное привеление к вещественному типу используеться при ДЕЛЕНИИ целочисленных констант, а при умножении я думал, что все сделает компилятор, поэтому и протупил.
|
|
|
Записан
|
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #94 : Апрель 18, 2008, 07:43:00 » |
|
Известно, что при описании ф-ии компилятор не учитывает имена параметров и возвращаемое значение. Но при перегрузке ф-ий, обязательным условием для всех перегружаемых ф-ий явл. одинаковое имя и ОДИНАКОВЫЙ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ. А почему же, если возвращаемое значение не входит в сигнатуру ф-ии, оно играет при перегрузке такую важную роль?
|
|
|
Записан
|
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #95 : Апрель 18, 2008, 10:11:30 » |
|
Известно, что при описании ф-ии компилятор не учитывает имена параметров и возвращаемое значение. Но при перегрузке ф-ий, обязательным условием для всех перегружаемых ф-ий явл. одинаковое имя и ОДИНАКОВЫЙ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ. А почему же, если возвращаемое значение не входит в сигнатуру ф-ии, оно играет при перегрузке такую важную роль?
Тип возвращаемого значения при перегрузке функций и методов не учитывается. #include "stdafx.h"
int a() { return 1; }
float a() { return 1.5; }
int _tmain(int argc, _TCHAR* argv[]) { float x = a(); }
Компиляция данного примера сгенерировала ошибку: Error 1 error C2556: 'float a(void)' : overloaded function differs only by return type from 'int a(void)' c:\users\max\documents\visual studio 2008\projects\testex\testex\testex.cpp 10 TestEx
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #96 : Апрель 22, 2008, 09:56:22 » |
|
Функция WinMain() в MSDN: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
Однако в примере (firststeps.ru) увидел ее как int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
Нашел #define APIENTRY WINAPI #define WINAPI __stdcall
Вопрос: Почему вместо APIENTRY нельзя сразу использовать сразу __stdcall или на крайний случай WINAPI, как в MSDN?
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #97 : Апрель 22, 2008, 10:31:57 » |
|
naxellar, код во всех случаях идентичный. Видимо можно писать по любому, хотя лично я не приветствую использование макроопределений в принципе, но если мелкософт предлагает такие макроопределения - видимо у них таки какие-то резоны были.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
[Йожжж]
Cтудент
Карма: +2/-0
Offline
Пол:
Сообщений: 72
|
|
« Ответ #98 : Апрель 30, 2008, 06:39:40 » |
|
Несколько вопросов по переопределению операций. 1) Почему при переопределении ~ компилятор говорит, что это следует делать без передачи параметров? У нас же есть 2 матрицы, между которыми что-то поиходит (по условию задания) ... По идее хотя бы ссылку на 1 из них надо передать. Возможно я неправ. 2) При переопределении какой-то операции я передаю одну из них параметром, а вторая переходит с указателем this. При переопределении мне надо создать новую матрицу и ее заполнить по условию задания. Я ее создаю, и выходит, что указатель на самую первую матрицу затирается и на его место появляется указатель на новую только что созданную матрицу? (вряд ли это так, но лучше спросить у более опытных людей). А можно ли обойтись без создания новой матрицы и просто заменить элементы одной из данныйх нам матриц по правилу? Заранее спасибо всем, кто чем-либо поможет. З.Ы. Матрица - считай что объект =)
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #99 : Апрель 30, 2008, 07:23:14 » |
|
компилятор говорит, что это следует делать без передачи параметров Это потому, что нельзя менять количество параметров у операторов, имеющих встроенные прототипы. Грубо говоря ты не сможешь перегрузить оператор = как унарный, а оператор ~ (который изначально унарный) как бинарный.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
|