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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
#1

Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this» - C++

16.12.2013, 10:42. Просмотров 517. Ответов 2
Метки нет (Все метки)

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
#include <cstdlib>
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
class String
{
private:
    char* str;
    int n; 
public:
    String(char* string = "")
    {
        n = strlen(string);
        str = new char[n + 1];
        strcpy(str, string);
    }
 
    String(char* string, size_t size)  //конструктор, позволяющий создать строку из size символов
    {
        n = size;
        str = new char[n + 1];      
        strncpy(str, string, n);
        if (strlen(string) > size)
             str[n] = '\0';
    }
 
    ~String()
    {
        if (str)
        delete [] str;
    }
 
    void print()
    {
        std::cout << str << endl;
    }
 
    int  getnum()const //кол-во символов в строке
    {
        return n;
    }
 
    char& getchar(int n) // символ из позиции n
    {
          
        return str[n - 1];
        
    }
 
    void upper()  // в верхний регистр
    {
        for (int i = 0; i < n; i++)
            str[i] = toupper((unsigned char)str[i]);
    }
 
    int  punctuation() const // кол-во знаков препинания
    {
        int count = 0;
        for (int i = 0; i < n; i++)
        if (ispunct((unsigned char)str[i]))
            count++;
        return count;
    }
};
 
int main()
{  
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    char s[255];
    cin.getline(s, 255);
    String str(s);
    
    str.upper();
    str.print();
    str.getchar(1) = 'R';
    
 
    cout << str.getnum() << endl;
    cout << str.punctuation() << endl;
    cout << str.getchar(1) << endl;
 
    system("PAUSE");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this» (C++):

Сложение и вычитание, умножение и деление, сравнение сумм - C++
Уважаемые форумчане! помогите, пожалуйста, нужно написать программу для работы с устаревшей денежной системой Великобритании. В ней...

Организовать ввод двух вещественных чисел и операции над ними: сложение, вычитание, умножение и деление - C++
Парни всем привет! Начинаю новую тему по решению задач Задача звучит так: Написать программу, которая запрашивает ввод двух...

Сложение / Вычитание / Умножение чисел записанных в виде массива char символов - C++
доброго времени суток. такой вопрос, как мне сделать выше перечилненные математичиские вычесления чилам записсаных как массив char но ...

Шаблон класса должен давать возможность вывести все элементы множества на экран, сложение, вычитание, осуществлять пересечение множеств - C++
Есть вот такое задание: 4. Создать шаблон класса Mnogyna. Шаблон класса должен давать возможность вывести все элементы множества на...

Выполнять сложение двух объектов структуры и возвращать результат в третьем объекте - C (СИ)
Здравствуйте! Проблема в решении задачи с использованием структур: Создать структуру Fraction (дробь) с полями numer и denom (числитель...

Вычисление значения выражения в виде текста (сложение и вычитание) - Assembler
помогите написать внешнюю процедуру на ЯВУ - Вычисление значения выражения представленного в виде текста (сложение и вычитание).

2
zss
Модератор
Эксперт С++
6486 / 6049 / 1987
Регистрация: 18.12.2011
Сообщений: 15,691
Завершенные тесты: 1
16.12.2013, 11:04 #2
C++
1
2
3
4
5
String* String::Add(const String &s2)
{
    strcat(str,s2.str);
    return this;
}
Вызывать так
C++
1
2
3
4
String s1,s2;
String* ps;
...
ps=s1.Add(s2);
ps будет указывать на s1
1
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
16.12.2013, 16:07  [ТС] #3
Дополнить класс из следующими методами:
- перегрузить операции: ввода-вывода, сложение, вычитание, отношения (<, >, <=, >=, ==, !=) , индексации (с проверкой выхода за границу индексов);
- разработать конструктор копий и перегрузить операцию присваивания для осуществления неповерхностного копирования.
А вот это как сделать?

Добавлено через 4 часа 41 минуту
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
#include "stdio.h"
#include "string"
#include "stdlib.h"
 
class MString
{
private:
    char* _p;
    size_t _size;
public:
    MString() : _p(NULL),_size(0)
    {
    }
    MString(size_t size) : _size(size)
    {
        _p = new char[_size + 1];
        memset(_p,0,_size + 1);
    }
    MString(const char* str)
    {
        _p = new char[strlen(str) + 1];
        memset(_p,0,strlen(str) + 1);
        strcpy(_p,str);
        _size = strlen(_p);
    }
    MString(const char* str,size_t size)
    {
        _p = new char[size + 1];
        memset(_p,0,size + 1);
        strncpy(_p,str,size);
        _size = size;
    }
    MString(const MString& rv)
    {
        operator=(rv);
    }
    MString& operator=(const MString& rv)
    {
      if(_p == rv._p)
          return *this;
      free_str();
      _p = new char[rv._size + 1];
      memset(_p,0,rv._size + 1);
      _size = rv._size;
      memcpy(_p,rv._p,_size);
      return *this;
    }
    MString& operator=(const char* str)
    {
        free_str();
        _p = new char[strlen(str) + 1];
        memset(_p,0,strlen(str) + 1);
        _size = strlen(str);
        strcpy(_p,str);
        return *this;
    }
    ~MString()
    {
        free_str();
    }
    MString& operator+(const MString& rv)
    {        
        char* tmp = _p;
        _p = new char[_size + rv._size + 1];
        memset(_p,0,rv._size + _size + 1);
        if(tmp)
          memcpy(_p,tmp,_size);
        memcpy(_p + _size, rv._p, rv._size);
        if(tmp)
          delete [] tmp;
        _size += rv._size;
        return *this;
    }
    MString& operator+(const char* str)
    {
        MString p(str);
        operator+(p);
        return *this;
    }
    bool operator ==(const MString& rv)
    {
        if(_size != rv._size)
            return false;
        if(memcmp(_p,rv._p,_size))
            return false;
        return true;
    }    
    void print(const char* fmt = 0) const
    {
        if(fmt)
            printf(fmt,_p);
        else
            printf("%s",_p);
    }
    size_t size() const
    {
        return _size;
    }
    char operator [] (size_t pos)
    {
        if(pos < _size)
            return _p[pos];
        return 0;
    }
private:
    void free_str()
    {
      if(_p)
      {
          delete [] _p;
          _p = NULL;   
          _size = 0;
      }
    }
};
 
int main()
{    
   MString s;
   MString s1;
   s = s + "123";   
   printf("%c",s[1]);
 
    system("PAUSE");
    return 0;
}
Дополнить класс виртуальными функциями.
Дополнить класс производным классом,разработать шаблон класса можете помочь?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 16:07
Привет! Вот еще темы с ответами:

Рекурсия. Сложение и вычитание через сложение/вычитание единицы - Prolog
Помогите пожалуйста народ!! Задача: Сложение и вычитание через сложение/вычитание единицы :wall:ПоМОГИТЕ

Длинная арифметика. Вычитание и деление. Реализация в виде функций в Си - Assembler
Доброго времени суток, киберфорум. Требуется помощь в написании итак уже заезженной темы: &quot;Длинная арифметика&quot; ТЗ: Требуется написать...

Как организовать интерфейс в виде абстрактного класса? - C++
У меня есть задание, вот его часть: - расчёты движения предмета должны осуществляться в библиотеке, для которой нужно создать интерфейс...

Составить программу, которая выводит в табличном виде результат вычисления функций y1(x), y2(x), y3(x) и y4(x) - C++


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru