Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
28 / 24 / 2
Регистрация: 11.12.2012
Сообщений: 448

Почему в данном случае используется operator int, а не operator double?

02.02.2013, 17:45. Показов 2115. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот программа
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
class ThreeD
{
    int x, y, z; // трехмерные координаты 
    public ThreeD() { x = y = z = 0; }
    public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
    static public implicit operator int(ThreeD obje)
    { 
        return obje.x*obje.y*obje.z;
    }
    public static implicit operator double (ThreeD o1)
    {
        return 3;
    }
    public void show()
    {
        Console.WriteLine(x + ", " + y + ", " + z);
    }
}
class TrueFalseDemo
{
    static void Main()
    {
        ThreeD a = new ThreeD(7, 5,1);
        ThreeD b = new ThreeD(2, 34,-10);
        ThreeD c = new ThreeD();
        double jk=8;
        jk = c;
        Console.WriteLine(jk);
        jk = a*5;
        Console.WriteLine(jk);
    }
}
Если в
C#
1
jk = a*5;
задать int(5), то объект использует operator int? Хотя jk задан как double. И в
C#
1
jk = c;
был использован operator double.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2013, 17:45
Ответы с готовыми решениями:

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

invalid operands of types 'double' and 'int' to binary 'operator%'
В строке где If выдает вот эту ошибку 2 раза: invalid operands of types 'double' and 'int' to binary 'operator%' #include...

Ошибка: invalid operands of types 'double' and 'int' to binary 'operator%'
Я писал программу и решил скомпилировать. В этих строках возникли ошибки. n = rint((a / pow(10, i))) % 10; o = a % rint(pow(10,i)); ...

12
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.02.2013, 18:39
У вас вторым множителем задано целое число, а рантайм старается подобрать ближайший подходящий тип при неявном приведении - поэтому используется оператор int.
Если вы напишете a*5.0, то будет использован double.
1
51 / 51 / 8
Регистрация: 31.10.2012
Сообщений: 481
03.02.2013, 15:33
Потому что оператор double дает десятичное число с плавающей точкой.
Иначе говоря, он даст более точный результат, если будут считаться числа с ним.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.02.2013, 16:48
Цитата Сообщение от SanchezPluz Посмотреть сообщение
он даст более точный результат, если будут считаться числа с ним.
Именно поэтому используется int, а не double? Среда выполнения пытается менее точный результат впарить?
0
51 / 51 / 8
Регистрация: 31.10.2012
Сообщений: 481
03.02.2013, 17:33
Цитата Сообщение от kolorotur Посмотреть сообщение
Именно поэтому используется int, а не double? Среда выполнения пытается менее точный результат впарить?
Я сказал, что double дает более точный вариант. Читайте внимательнее, пожалуйста.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.02.2013, 18:55
Цитата Сообщение от SanchezPluz Посмотреть сообщение
Читайте внимательнее, пожалуйста.
Ну давайте почитаем вместе.
Автор спрашивает:
Цитата Сообщение от Euroman Посмотреть сообщение
Почему в данном случае используется operator int, а не operator double?
Вы отвечаете:
Цитата Сообщение от SanchezPluz Посмотреть сообщение
Потому что оператор double дает десятичное число с плавающей точкой.
Иначе говоря, он даст более точный результат, если будут считаться числа с ним.
Из вашего ответа я понял, что среда выполнения использует оператор int вместо double потому, что использование оператора double
Цитата Сообщение от SanchezPluz Посмотреть сообщение
даст более точный результат
Другими словами, пытается впарить менее точный результат.
Поправьте меня, пожалуйста, если я не так вас понял.
0
 Аватар для Hermein
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
03.02.2013, 21:47
Цитата Сообщение от kolorotur Посмотреть сообщение
Другими словами, пытается впарить менее точный результат.
Поправьте меня, пожалуйста, если я не так вас понял.
Приведение типов, он приводит к менее "жрущему" память типу
С таким же успехом можно сказать почему не к long приводит, а к int
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.02.2013, 22:29
Hermein, это тут вообще не при чем
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.02.2013, 22:32
Hermein, да я в своем ответе об этом и говорил, только не с позиции памяти, а с позиции соответствия типов.

Но мне интересно, где здесь замешана точность значения, о которой говорил товарищ SanchezPluz.

Добавлено через 45 секунд
Psilon, дабл - QWORD, то бишь 64 бита.
Инт - 32 бита.
А вот флоат - да, жрет 32 бита, на то он и single.
0
03.02.2013, 22:33

Не по теме:

kolorotur, да я исправил ужо, не выспался видать

0
28 / 24 / 2
Регистрация: 11.12.2012
Сообщений: 448
04.02.2013, 00:56  [ТС]
Ну, бывает, SanchezPlus не так понял.
0
51 / 51 / 8
Регистрация: 31.10.2012
Сообщений: 481
04.02.2013, 07:19
Цитата Сообщение от kolorotur Посмотреть сообщение
Поправьте меня, пожалуйста, если я не так вас понял.
Да, именно.
Я сейчас не про компьютер говорю вовсе, а про простейшую математику.
Вот, к примеру, вы получите из какого-нибудь подсчета ответ, равный числу пи 3.1417.
Вы ведь можете написать оператор double и оставить так, но ведь можете написать int и получите тогда всего лишь 3.
Так что более правильно: 3.1417 или 3?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 11:31
SanchezPluz, ни то ни другое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2013, 11:31
Помогаю со студенческими работами здесь

Ошибка "invalid operands of types double and int to binary operator"
#include <iostream> #include <math.h> using namespace std; int main() { float k; int n,P,a; k=1;

invalid operands of types ‘double*’ and ‘double’ to binary ‘operator*’
#include "mpi.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #define count 120 int main(int argc,char *argv) { ...

Не понимаю почему выдает ошибку "Operator '>' cannot be applied to operands of type 'object' and 'int'"
Здравствуйте. У меня проблема с кодом, не понимаю почему выдает ошибку. private void button1_Click(object sender, EventArgs...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&, Fraction...

Error: The operator += is undefined for the argument type(s) int,int
Алёна собирает вещи в отпуск. С собой в самолёт она может взять ручную кладь и багаж. Для ручной клади у Алёны есть рюкзак, а для багажа –...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru