Форум программистов, компьютерный форум CyberForum.ru

Преобразование типов данных в классах - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массивы http://www.cyberforum.ru/cpp-beginners/thread229228.html
Нужна небольшая помощь в этой программе, тут есть ошибка и нужно соединить их в 1 если не сложно помогите пожалуйста! 1. Найти сумму отрицательных элементов массива 2. Найти произведение элементов массива, расположенных между максимальным и минимальным элементами. 3.Упорядочить элементы массива по возрастанию 1. #include<iostream> #include<ctime> using namespace std;
C++ С чего начать изучение с++ Посоветуйте с чего начать изучение с++. В этом деле нуб если не считать html и css.Цель в дальнейшем программировать под Android. http://www.cyberforum.ru/cpp-beginners/thread229225.html
Шахматная доска Turbo C++ C++
Нужно нарисовать и закрасить. Вот нарисовал, но как закрасить клетки через раз? #include<graphics.h> #include<conio.h> int a,b,c, N=8, x1=190, y1=100,x2=370, y2=280; float x,y,h; void main () {
Ввод данных с клавиатуры. char C++
Как считать нажатую клавишу и сохранить в char? в паскале это было примерно так: c:=readkey; а как в с\с++?
C++ C++ for Dos (Структуры, Файлы, Графика) http://www.cyberforum.ru/cpp-beginners/thread229193.html
Структуры 1. Среди работников данного предприятия найти тех, чья зарплата за месяц ниже средней по предприятию; а также вывести на экран список тех, кто проработал на предприятии более 10 лет, с указанием их фамилии, зарплаты, стажа работы и должности. Файлы 2. Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить...
C++ Как сравнить сумму элементов массива? нужно сравнить сумму элементов массива, ввод при помощи for осуществляется( подробнее

Показать сообщение отдельно
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.01.2011, 00:13     Преобразование типов данных в классах
Цитата Сообщение от FanAizu Посмотреть сообщение
Компилятор выдаст ошибку и скажет, что не знает, как привести int к TIME?
Если да, то нужно использовать конструктор, который преобразовывает данные из стандартного типа данных в тип данных класса, то есть в класс нужно добавить вот такой метод:
Конструктор срабатывает только при создании объекта. При записи object = 10; сработает оператор присваивания. Компилятор, по-умолчанию обычно генерирует следующие функции: конструктор без параметров, деструктор, оператор взятия адреса, и функцию operator=(оператор присваивания), параметром которой является константная ссылка на объект данного класса. Т.е.
C++
1
TIME& operator=(const TIME& rhs);
Благодаря этому можно совершать присваивания между объектами одного типа.
C++
1
2
3
TIME object1;
TIME object2;
object1 = object2; // вызов функции TIME& operator=(const TIME& rhs);
В функциональной форме это будет выглядеть так
C++
1
object1.operator=(object2);
В приведённом вами коде, вы пытаетесь вызвать функцию object.operator=(10); Т.е. оператор присваивания, который принимает переменную типа int в качестве параметра. В вашем классе оператор присваивания для типа int не определён. Для того чтобы такая запись сработала необходимо просто перегрузить оператор присваивания следующим образом:
C++
1
2
3
4
5
6
7
8
//...
public:
    TIME& operator=(int val)
    {
        a = val;
        return *this;
    }
//...
P.S. Почему собственно запись object = 10; всётаки срабатывает при объявлении конструктора с параметром...
C++
1
2
3
4
TIME(int b)
{
    // ...            
}
В таком случае сработает всё тот же оператор присваивания TIME& operator=(const TIME& rhs), просто предварительно создастся временный объект класса TIME
C++
1
object = 10; // object = TIME(10);
Иногда такие преобразования могут быть полезны. Например при передаче в функцию, аргументом которой является объект типа std::string, строкового литерала сработает именно такое преобразование. Но в большестве случаев эту возможность лучше запретить с помощью ключевого слова explicit.
 
Текущее время: 06:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru