Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2013, 10:47   #1
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
Восклицание Организовать арифметику класса

Код:
#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;
}
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 11:18   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

что сделать то надо? =)
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.12.2013, 11:43   #3
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this»
Дополнить класс следующими методами:
- перегрузить операции: ввода-вывода, сложение, вычитание, отношения (<, >, <=, >=, ==, !=) , индексации (с проверкой выхода за границу индексов);
- разработать конструктор копий и перегрузить операцию присваивания для осуществления неповерхностного копирования.

Дополнить класс виртуальными функциями.
Дополнить класс производным классом.
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 11:53   #4
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Накидал, дальше думаю ясно как.

Код:
#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]);
   return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.12.2013, 13:52   #5
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

А можно пожалуйста закомментировать что где сделано
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 14:00   #6
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

первые 4 конструкторы, потом конструктор копирования, операторы присваивания, операторы сложения, оператор сравнения, метод печати, метод, возвращающий размер, оператор индексного доступа типа srt[i]
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.12.2013, 14:31   #7
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

Что то не запускается так
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 14:41   #8
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

что за ошибки?
в студии норм.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.12.2013, 14:44   #9
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

Можно пожалуйста полносью написать как выглядит вся программа
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 14:46   #10
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

это вся программа =)

Она ничего не делает, это пример.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень важно,Как Организовать арифметику класса Мария1992 Помощь студентам 0 11.12.2013 04:04
задача на целочисленную арифметику dubdubom Microsoft Office Excel 3 30.12.2011 05:48
Реализовать логическую арифметику Ra88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 05.10.2010 09:07
на длинную арифметику Figushkin Помощь студентам 3 04.06.2010 08:48
Как организовать event'ы у своего класса(потока)? TwiX Общие вопросы Delphi 23 16.02.2010 03:38