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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2013, 15:08   #11
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

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

Не выводит теперь вообще ничего
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 15:52   #13
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

так, с другого компа заработало, а Дополнить класс виртуальными функциями.
Дополнить класс производным классом,разработать шаблон класса можете еще помочь?
Мария1992 вне форума Ответить с цитированием
Старый 16.12.2013, 16:21   #14
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;
    }    
    virtual void print(const char* fmt = 0) const
    {
        if(fmt)
            printf(fmt,_p);
        else
            printf("%s\n",_p);
    }
    size_t size() const
    {
        return _size;
    }
    const char* buf() const
    {
        return _p;
    }
    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;
      }
    }
};

class MStringEx : public MString
{
  typedef MString Parent;
public:
    MStringEx() : Parent()
    {}
    MStringEx(size_t size) : Parent(size)
    {}
    MStringEx(const char* str) : Parent(str)
    {}
    MStringEx(const char* str, size_t size) : Parent(str,size)
    {}
    void print(const char* fmt = 0) const
    {
        printf("str:%s\n",this->buf());
    }
};


int main()
{    
   MString s;
   MStringEx s1("qwerty");
   s = s + "123";   
   s.print();
   s1.print();
   return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.12.2013, 23:30   #15
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
Печаль

ой ей, для моего мозга все сложно, можно каждый пункт пояснит закомментировать, а то я так не разберусь
Мария1992 вне форума Ответить с цитированием
Старый 17.12.2013, 14:01   #16
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

Обьясните что за size_t_size
?
Мария1992 вне форума Ответить с цитированием
Старый 17.12.2013, 14:51   #17
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

size_t - тип такой. _size - переменная (поле класса - размер строки в данном случае)
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 17.12.2013, 15:14   #18
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

А для чего он нужен?
Мария1992 вне форума Ответить с цитированием
Старый 17.12.2013, 15:28   #19
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Обычный целочисленный тип, можете заменить на int.

http://pastebin.com/3rXyzy5g
Помог? Оставляем отзыв =)
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