Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перегрузка функций

49K
26 октября 2009 года
dom1nator
8 / / 05.10.2009
Помогите пожалуйста с лабой в Visual Studio:
Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой стро-ки (объекта класса строки).
Определить операции над строками:
+ конкатенация двух строк;(непонятно что такое)
++ преобразование символов строки в строчные (маленькие) символы.
9
26 октября 2009 года
Lerkin
3.0K / / 25.03.2003
У одного меня дежавю?
20K
27 октября 2009 года
sem2711
124 / / 23.09.2009
Вот одно из возможных решений:

String2.h
Код:
#ifndef _STRING2_H_
#define _STRING2_H_

#include <iostream>
#include <cstring>
#include <cctype>

class String
{
public:
    explicit String(const char* c = "");
    String(const String& s);
    ~String();
    const String& operator =(const String& s);
    const String& operator +(const String& s);
    void to_lower();
    void show() const;
    size_t size() const;
private:
    char* line;
    size_t len;
};

#endif  // _STRING2_H_


String2.cpp
Код:
#include "String2.h"

String::String(const char* c)
{
    len = strlen(c);
    line = new char[len + 1];
    strcpy(line, c);
}
String::String(const String& s)
{
    len = s.len;
    line = new char[len + 1];
    strcpy(line, s.line);
}
String::~String()
{
    delete [] line;
}
const String& String::operator =(const String& s)
{
    if (this == &s) return *this;
    delete [] line;
    len = strlen(s.line);
    line = new char[len + 1];
    strcpy(line, s.line);
    return *this;
}
const String& String::operator +(const String& s)
{
    size_t len_sum = len + s.len;
    char* temp = new char[len + 1];
    strcpy(temp, line);
    delete [] line;
    line = new char[len_sum + 1];
    strcpy(line, temp);
    strcat(line, s.line);
    delete [] temp;
    len = strlen(line);
    return *this;
}
void String::to_lower()
{
    for (size_t i = 0; i < len; ++i)
    {
        line = tolower(line);
    }
}
void String::show() const
{
    std::cout << line << std::endl;
}
size_t String::size() const
{
    return len;
}


Ну, и небольшой драйвер, демонстрирующий требуемые возможности класса.

main.cpp
Код:
#include <iostream>
#include "String2.h"

int main()
{
    String A("If I fell in love with you ");
    String B(A);
    A.show();
    B.show();
    String C("Could you promise to be true");
    C.show();
    String D;
    D = B + C;
    D.show();
    D.to_lower();
    D.show();
    return 0;
}


В MSVS компилятор может ругаться на использование "небезопасных" функций strcpy() и strcat(), но их новые функции strcpy_s() и т.п. к стандарту никакого (по-моему) отношения не имеют. По крайней мере gcc о них ничего не знает.
P.S. Конкатенация - операция "склеивания" объектов.
416
27 октября 2009 года
MaitreDesir
380 / / 02.01.2008
Цитата: Lerkin
У одного меня дежавю?



В какой раз?? Сотый? Даже я уже наизусть выучил текст темы, хотя здесь недавно...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог