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

классы.посмотрите пожалуйста) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ подскажите пожалуйста, что не так? http://www.cyberforum.ru/cpp-beginners/thread291990.html
Здравствуйте. У меня вопрос по поводу задачи: найти букву, чаще встречающуюся в тексте. Т.е. я ввожу массив из элементов, записываю в матрицу не повторяющиеся элементы *если есть эл-ты, которые повторяются, я увеличиваю кол-во, которое уже есть в матрице * после, ищу эл-т с наибольшим кол-ом и вывожу его, при том само кол-во выводить не обязательно. там еще такая путаница с типами...
C++ Обработка одномерных элементов есть код для задачи: Преобразовать заданный массив целых положительных чисел F(n) таким образом, чтобы цифры каждого его элемента были записаны в обратном порядке. Определить количество простых чисел в массиве до и после преобразования. После преобразования удалить из массива максимальный элемент. #include <iostream> #include <algorithm> #include <vector> bool is_prime(const int n){ ... http://www.cyberforum.ru/cpp-beginners/thread291979.html
указатель на функцию C++
Функция должна сортировать и по возрастанию,и по убыванию с помощью бинарных предикатов.И ещё отсортировать элементы массива по возрастанию их синуса. Программа работает только в одном случае,а для синусов вообще не работает. Объясните,в чём моя ошибка,а точнее,как сделать,чтобы функция сортировала правильно для всех трёх случаев. #include "stdafx.h" #include <conio.h> #include <iostream>...
C++ Матрица, последовательность, координаты
Здравствуйте, помогите решить в Си 1) Прочитать текстовый файл и подсчитать количество слов в нём (слова разделены пробелами, запятыми и точками). Имя файла передаётся через командную строку. 2) Вводится последовательность целых чисел и записывается в двусвязный список. Удалить из этого списка элементы с минимальным значением. 3) Написать программу для определения положения точки с...
C++ Умножение матриц http://www.cyberforum.ru/cpp-beginners/thread291970.html
Задача такая : Для заданой квадратической матрицы А заданого порядка n найти произведение А * В, где элементы матрицы В узнаются за формулой : Bij = 1/(i+j-1) i.j = целые больше ноля Вот что получилось: #include <iostream> #include <cstdlib> #include <stdio.h> #include <conio.h> using namespace std;
C++ Возврат строки из функции по указателю Здравствуйте. Обьясните пожалуйсто, почему компилятор выдает предупреждение при выполнении следующего кода и почему строка возвращается не полностью ? #include "windows.h" #include <iostream> using namespace std; char *func() { char arr="stro4ka"; return arr; подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
09.05.2011, 22:10     классы.посмотрите пожалуйста)
Вот тебе отрывок из моей книги.
Сделай по аналогии...
Классы-оболочки встроенных типов
Преобразование типов позволяет нам обойти запрет на определение новых операций для встроенных типов. Для этого мы должны определить класс-оболочку для встроенного типа и реализовать в этом классе преобразование типов и требуемые операции. Давайте реализуем операцию возведения в целую степень для типа double. Класс-оболочка представлен в листинге 3.16.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Листинг 3.16. Класс-оболочка Real для double
class Real
{    double t;
  public:
    Real (const double &a=0.0){ t = a;}    // double -> Real
    operator double () { return t; }       // Real -> double
// "новая" операция возведения в целую степень
    Real operator^(int d) 
    { double r = t; 
      if (d==0) return 1;                  // t^0 = 1
      else if (r==0) return 0;             // 0^d = 0
      else if (d==1) return *this;         // t^1 = t
      else if (d<0) { r=1/r; d=-d; }       // t^(-d)=(1/t)^d
      double p = 1; 
      for(int i=1; !(i>d); i++) p* = r;    // вычисляем степень
      return p;                            // неявное преобразование
    }
};
Проверка показывает, что все варианты работают правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{    Real t = 2;
    cout << (t^0) << endl;            // 2^0 = 1
    cout << (t^1) << endl;            // 2^1 = 2
    t = 1;
    cout << (t^12)    << endl;        // 1^12 = 1
    cout << (t^-2)    << endl;        // 1^-2 = 1
    t = 0;
    cout << (t^0) << endl;            // 0^0 = 1
    cout << (t^3) << endl;            // 0^3 = 0
    t = 2;
    cout << (t^2)    << endl;         // 2^2 = 4
    cout << (t^-2)    << endl;        // 2^-2 = 0.25
    return 0;
}
Но надо помнить, что эта операция работает только для переменных типа Real — константы типа double таким способом возводить в степень не получится.
Таким образом, мы можем легко ввести «новые» арифметические операции для любого встроенного типа данных. Например, для int можно написать класс Integer, который инкапсулирует все, касающееся целых чисел. Собственно, мы действовали аналогично разработчикам языка программирования Java, реализовав тип-оболочку для встроенного типа данных.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru