Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не могу отловить крайние случаи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание тестовой оболочки http://www.cyberforum.ru/cpp-beginners/thread1541647.html
Доброго времени суток. Хочу создать тестовую оболочку. Подскажите с чего начать. P.S: Без троллинга, помогите добрые люди
C++ Вычисление функции разложением в ряд Тейлора Дано вещественное число X и целое число N (> 0). Найти значение выражения X − X3/(3!) + X5/(5!) − … + (−1)N·X2·N+1/((2·N+1)!)... http://www.cyberforum.ru/cpp-beginners/thread1541644.html
Ввести число и номер месяца. Напечатать дату прописью C++
Ввести число и номер месяца. Напечатать дату прописью. Как можно это реализовать?
C++ Что такое "эхо печать"? И как через такую печать сделать калькулятор?
Само задание такое: Создать программу-калькулятор, обеспечивающую ввод с клавиатуры в режиме эхо-печати только цифр, а также обработку нажатия клавиш +, -, *,/ с помощью акселераторов. Я...
C++ Aapt.exe could not be found http://www.cyberforum.ru/cpp-beginners/thread1541611.html
Установил vs 14, доустановил ndk в нем же, создаю стандартный проект "Hello world", собираю, при попытке запустить появилась ошибка aapt.exe could not be found at ' ', потом постоянно при настройке...
C++ Переставить цифры местами так, чтобы получилось большее число Дано число. Если можно переставить его цифры так, чтобы получилось большее число, выведите YES, в противном случае выведите NO. Например, в числе 3112 можно переставить цифры и получить 3211, подробнее

Показать сообщение отдельно
oPean
1 / 1 / 0
Регистрация: 30.09.2015
Сообщений: 69
19.10.2015, 00:34  [ТС]
Собственно, очередной "затык". Совершенно не понимаю, как это реализовать. Подкиньте идею, пожалуйста.
Кликните здесь для просмотра всего текста
В этой задаче вам требуется реализовать оператор [] для уже известного вам класса String. Однако на этот раз оператор должен реализовывать нестандартное поведение: оператор нужно реализовать таким образом, чтобы для объекта str класса String можно было писать str[i][j] и это выражение возвращало подстроку начинающуюся в позиции i (считая с 0) и заканчивающуюся в позиции j (не включая).

Например:

C++
1
2
3
String const hello("hello");
String const hell = hello[0][4]; // теперь в hell хранится подстрока "hell"
String const ell  = hello[1][4]; // теперь в ell хранится подстрока "ell"
Обратите внимание, что i может равняться j, в этом случае результатом должна быть пустая строка. Гарантируется, что i никогда не будет больше j, и они не будут выходить за пределы длины строки.
Требования к реализации: При выполнении задания вы можете создавать любые методы/конструкторы или даже структуры/классы, если они вам нужны. Реализовывать методы, которые уже объявленны в шаблоне, не нужно они уже реализованы. При выполнении задания не вводите и не выводите что-либо. Реализовывать функцию main не нужно.


Добавлено через 4 часа 9 минут
И ещё одна проблема. Где тут утечка памяти? Комментил всё, кроме конструктора, всё равно выдает сообщение об утечке...не понимаю, что не так. Expression заменил на int, чтобы уж совсем упростить и исключить проблемы с ним. Собственно, смотреть можно начиная с класса SharedPtr.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <cstddef>
#include <iostream>
 
#include <vld.h>
 
struct Expression
{
    virtual double evaluate() const = 0;
    virtual ~Expression() {}
 
};
 
struct Number : Expression
{
    Number(double value)
    : value(value)
    {}
    ~Number() { }
    double evaluate() const {
        return value;
    }
private:
    double value;
};
 
struct BinaryOperation : Expression
{
 
    BinaryOperation(Expression const * left, char op, Expression const * right)
    : left(left), op(op), right(right)
    { }
 
    double evaluate() const {
 
        if (op == '+') return left->evaluate() + right->evaluate();
        if (op == '-') return left->evaluate() - right->evaluate();
        if (op == '*') return left->evaluate() * right->evaluate();
        if (op == '/') return left->evaluate() / right->evaluate();
    }
    ~BinaryOperation() {
        delete left;
        delete right;
    }
private:
    Expression const * left;
    Expression const * right;
    char op;
};
 
struct SharedPtr
{
    // реализуйте следующие методы
    //
    std::size_t count() const {
        if (stored) {
            return stored->count;
        }
        return 0;
    }
    /*Expression* get() const {
    return stored->ptr_;
    }*/
 
    //void reset(Expression *ptr = 0) {
    //  this->~SharedPtr();
    //  new (this) SharedPtr(ptr);
    //}
 
    /*Expression& operator*() const { return *get(); }
    Expression* operator->() const { return stored->ptr_; }*/
 
    //SharedPtr() : stored(0) {}
 
    explicit SharedPtr(int * const ptr) : stored(new storage(ptr)) {}
 
    //SharedPtr(SharedPtr const& other) : stored(other.stored) {
    //  increment();
    //}
 
    //SharedPtr & operator =(SharedPtr const& other) {
    //  if (stored != other.stored) {
    //      decrement();
    //      stored = other.stored;
    //      increment();
    //  }
    //  return *this;
    //}
 
    ~SharedPtr() {
        decrement();
    }
private:
    /*void increment() {
    if (stored) {
    ++stored->count;
    }
    }*/
 
    void decrement() {
        if (stored && (--stored->count == 0)) {
            delete stored->ptr_;
            delete stored;
            stored = 0;
        }
    }
 
    struct storage {
 
        explicit storage(int * const ptr) : ptr_(ptr), count(1) {}
        
        int * ptr_;
        std::size_t    count;
    };
 
    storage * stored;
 
};
 
int main() {
    int a = 10;
    int * b = &a;
    SharedPtr a1(b);
    std::cout << a1.count() << std::endl;
    if (_CrtDumpMemoryLeaks())
        std::cout << "memory leak is detected" << std::endl;
    else
        std::cout << "no memory leaks" << std::endl;
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru