КИТА unofficial
Апрель 28, 2024, 07:06:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 ... 3 4 [5] 6 7 ... 12   Вниз
  Печать  
Автор Тема: Вопросы в С/С++  (Прочитано 149475 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #80 : Март 18, 2008, 05:13:17 »

vimmax

Microsoft Visual Studio 2008 генерит байт-код, исполняемый виртуальной машиной. Это обеспечивает кроссплатформенность на уровне скомпилированного кода(!). Такое приложение может быть запущено на любой ОС, для которой есть реализация это виртуальной машины.
Хотя Микрософт для win-платформ предлагает .NET Framework, существуют и реализации под другие платформы, в том числе и в рамках open source-инициатив. К примеру, реализация .NET - Mono поддерживает(как обещается) Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X.



Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #81 : Март 19, 2008, 08:16:19 »

Подскажите, пожалуйста. кто знает, что будет в такой ситуации:

Код: (cpp)
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 Offline

Пол: Мужской
Сообщений: 2399



« Ответ #82 : Март 19, 2008, 08:22:34 »

я, конечно, не знаток С++, но все же... я бы, перед тем как задавать такой вопрос, попробовал запустить этот код и посмотреть что же будет. задай атрибутам разные значения, а потом в классе АВ просто выведи AB::a на экран...

ЗЫ: поправте плиз, если я гоню...

ЗЗЫ: и вопрос автору вопроса -- расскажи плиз как ты сам пытался найти ответ на вопрос.
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #83 : Март 20, 2008, 07:15:48 »

Подскажите, пожалуйста. кто знает, что будет в такой ситуации:

Код: (cpp)
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 Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #84 : Март 20, 2008, 08:14:51 »

Предупреждение с artem90 снято, тему подчистил.

Хочу предупредить всех: вы видели, что бывает за флуд и разборки в тематическом форуме. То что предупреждение было сразу снято, это исключение, которое в данной теме не повторится. Давайте заниматься здесь C/C++
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #85 : Март 20, 2008, 10:44:46 »

При этом если модифицировать слегка код

Код: (cpp)
class A
{
public:
          int a;
};   

class B
{
public:
          int a;
};
     
class AB: public A, public B { };


И попробовать где-нибудь в программе обратиться к унаследованому свойству следующим образом:

Код: (cpp)
AB obj;
obj.a = 5;
Возникнет ошибка. Ввиду неоднозначности. Необходимо явно указывать к какому а (к унаследованному от какого класса) происходит обращение

Где то так:

Код: (cpp)
AB obj;
obj.A::a = 10;
obj.B::a = 15;
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #86 : Март 20, 2008, 11:58:18 »

Да, LazarusLong верно ответил. Аналогичный пример был в лекции, но только с методами (так как "светить" внутренним устройством класса не рекомендуется). Наследники содержат полные копии всех своих предков. Единственное - к чему-то нет доступа из-за ограничений области видимости. В данном примере показано, что унаследованы оба атрибута, но из-за неоднозначности с именем необходимо явно указывать тип базового класса при обращении.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #87 : Март 23, 2008, 01:04:57 »

Товарищи, кто-то может мне подсказать, в C++ выделение памяти в куче происходит оператором new, его аналог в С - malloc() или calloc(). А вот перераспределить память чем можно? В С, например, я юзал realloc(), а в C++ что-то подобное есть?
Записан
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #88 : Март 23, 2008, 03:17:32 »

artem90
Цитировать
Функция calloc() принимает два параметра: число ячеек массива, под которые надо выделить память, и размер этой ячейки в байтах; делает эта функция следующее: выделяет нужное количество памяти (непрерывный кусок) и обнуляет все значения в нём.

Си++ - Викиучебник
malloc() просто выделяет память, но не очищает значения в участке памяти.
Цитировать
Важное отличие оператора new от функции malloc() заключается в том, что он возвращает значение типа "указатель-на-объект" (то есть MyClass *), в то время как функция malloc() - "указатель-на-что-угодно" (void *).
Записан
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #89 : Март 24, 2008, 08:42:57 »

Код: (cpp)
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
А если вот так
Код: (cpp)
asd::qwe(int flag1)
{
flag=flag1;
}
то все нормально... в MSDN понимаю ошибку, но не вижу такую же у себя Непонимающий

З.Ы. Гуглить пробывал, но толкового ничего нету, в MSDN самое полезное оказалось ...
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
vimmax
Mодератор
Декан
*****

Карма: +42/-3
Offline 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 Offline

Пол: Мужской
Сообщений: 67


ИУС-07а


« Ответ #91 : Март 30, 2008, 09:22:22 »

переопределение и перегрузка оператора это одно и тоже?
Записан

йа не програмист, йа одмин
cout-это тру! (с)EvilMax
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #92 : Март 30, 2008, 09:59:15 »

Сис_Одмин, да.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #93 : Март 31, 2008, 09:28:27 »

Кто знает, объясните пожалуйста, в чем проблема. У меня компилятор Borland C++ 3.11.
Я решил поэкспериментировать с типами данных с плавающей точкой, набрал простейший код:

Код: (cpp)
#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)

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

Код: (cpp)
a=50*1000.;

или так:
Код: (cpp)
a=(float)50*1000;

Но все таки старенький Борланд 3.11 сыграл злую шутку, ведь на Борланде 6 все работало изначально хорошо. Ведь явное привеление к вещественному типу используеться при ДЕЛЕНИИ целочисленных констант, а при умножении я думал, что все сделает компилятор, поэтому и протупил.
Записан
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #94 : Апрель 18, 2008, 07:43:00 »

Известно, что при описании ф-ии компилятор не учитывает имена параметров и возвращаемое значение. Но при перегрузке ф-ий, обязательным условием для всех перегружаемых ф-ий явл. одинаковое имя и ОДИНАКОВЫЙ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ. А почему же, если возвращаемое значение не входит в сигнатуру ф-ии, оно играет при перегрузке такую важную роль?
Записан
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #95 : Апрель 18, 2008, 10:11:30 »

Известно, что при описании ф-ии компилятор не учитывает имена параметров и возвращаемое значение. Но при перегрузке ф-ий, обязательным условием для всех перегружаемых ф-ий явл. одинаковое имя и ОДИНАКОВЫЙ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ. А почему же, если возвращаемое значение не входит в сигнатуру ф-ии, оно играет при перегрузке такую важную роль?

Тип возвращаемого значения при перегрузке функций и методов не учитывается.
Код: (cpp)
#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 Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #96 : Апрель 22, 2008, 09:56:22 »

Функция WinMain() в MSDN:
Код: (cpp)
int WINAPI WinMain(      
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
Однако в примере (firststeps.ru) увидел ее как
Код: (cpp)
int APIENTRY WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
Нашел
Код: (cpp)
#define APIENTRY    WINAPI
#define WINAPI      __stdcall
Вопрос: Почему вместо APIENTRY нельзя сразу использовать сразу __stdcall или на крайний случай WINAPI, как в MSDN?
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #97 : Апрель 22, 2008, 10:31:57 »

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

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
[Йожжж]
Cтудент
*

Карма: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 72



« Ответ #98 : Апрель 30, 2008, 06:39:40 »

Несколько вопросов по переопределению операций.
1) Почему при переопределении ~ компилятор говорит, что это следует делать без передачи параметров? У нас же есть 2 матрицы, между которыми что-то поиходит (по условию задания) ... По идее хотя бы ссылку на 1 из них надо передать. Возможно я неправ.
2) При переопределении какой-то операции я передаю одну из них параметром, а вторая переходит с указателем this. При переопределении мне надо создать новую матрицу и ее заполнить по условию задания. Я ее создаю, и выходит, что указатель на самую первую матрицу затирается и на его место появляется указатель на новую только что созданную матрицу? (вряд ли это так, но лучше спросить у более опытных людей).
А можно ли обойтись без создания новой матрицы и просто заменить элементы одной из данныйх нам матриц по правилу?
Заранее спасибо всем, кто чем-либо поможет.
З.Ы. Матрица - считай что объект =)
Записан

LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #99 : Апрель 30, 2008, 07:23:14 »


компилятор говорит, что это следует делать без передачи параметров
Это потому, что нельзя менять количество параметров у операторов, имеющих встроенные прототипы. Грубо говоря ты не сможешь перегрузить оператор = как унарный, а оператор ~ (который изначально унарный) как бинарный.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Страниц: 1 ... 3 4 [5] 6 7 ... 12   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.132 секунд. Запросов: 37.