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

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

Восстановить пароль Регистрация
 
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
16.12.2013, 10:42     Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this» #1
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 10:42     Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this»
Посмотрите здесь:

C++ Сложение и вычитание поэлементно...
сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора C++
C++ Сложение, вычитание, умножение
Организовать ввод двух вещественных чисел и операции над ними: сложение, вычитание, умножение и деление C++
C++ Как организовать интерфейс в виде абстрактного класса?
C++ Шаблон класса должен давать возможность вывести все элементы множества на экран, сложение, вычитание, осуществлять пересечение множеств
сложение и вычитание, умножение и деление, сравнение сумм C++
C++ Сложение и вычитание

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,181
Завершенные тесты: 1
16.12.2013, 11:04     Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this» #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
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
16.12.2013, 16:07  [ТС]     Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this» #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;
}
Дополнить класс виртуальными функциями.
Дополнить класс производным классом,разработать шаблон класса можете помочь?
Yandex
Объявления
16.12.2013, 16:07     Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this»
Ответ Создать тему
Опции темы

Текущее время: 22:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru