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

Классы и компоненты - C++

Восстановить пароль Регистрация
 
4aynik
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
24.05.2010, 13:26     Классы и компоненты #1
Для класса

class String
{
char* Buff;
unsigned Size;
...
}

написать конструктор

String(const char*);

и деструктор, а также оператор [] (оператор доступа к символам строки по их номеру с проверкой правильности

индексации).

Реализовать программу, в которой:
- создаётся объект типа String со значением "Block";
- с помощью оператора индексации значение объекта выводится на экран.

Дополнение:
1) для размещения строки использовать динамическую память.
2) Программа должна состоять из двух моделей: 'main.cpp' и 'str.cpp'. В 'str.cpp' реализуется член-функции

класса String, а в 'main.cpp' этот класс используется. Описание класса String вынесено в файл заголовка

'str.h', который подключается в оба модуля программы.

Добавлено через 2 часа 51 минуту
Коструктор по идее такой будет...

string (const char* _n)
{
buff=_n;
size=strlen(_n);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
24.05.2010, 13:28     Классы и компоненты #2
Решение
Файл String.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//-------------------------------------------------------------
class String {
private:
char *ch_str;
public:
String(const char *buff);           //конструктор с параметром.
String(const String& p);           //конструктор копирования.
const String& operator = (const String& p);  //операция присваивания.
const String& operator = (const char *buff);  //операция присваивания.
virtual ~String();            //Деструктор.
unsigned int len();           //Длинна строки.
operator char*();             //преобразования к char *
operator const char*();       //преобразования к const char *
char& operator [](int index); //индексация.
};
//--------------------------------------------------------------
Файл String.cpp:
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
#include <string.h>
#include "String.h"
//конструктор с параметром.
String::String(const char *buff){ ch_str = new char[strlen(buff)+1]; strcpy(ch_str,buff); }
//конструктор копирования.
String::String(const String& p){ ch_str = new char[strlen(p.ch_str)+1]; strcpy(ch_str,p.ch_str);}
//операция присваивания.
const String& String::operator = (const String& p){
if(&p==this)return *this;   
delete []ch_str;
ch_str = new char[strlen(p.ch_str)+1]; strcpy(ch_str,p.ch_str);
return *this;
}
//операция присваивания.
const String& String::operator = (const char *buff){    
delete []ch_str;
ch_str = new char[strlen(buff)+1]; strcpy(ch_str,buff);
return *this;
}
 
//Деструктор.
String::~String(){ delete[]ch_str;}
//Длинна строки.
unsigned int String::len(){return strlen(ch_str);}           
//преобразования к char *
String::operator char*(){return ch_str;}  
//преобразования к const char *          
String::operator const char*(){return ch_str;}    
char&String::operator [](int index){return ch_str[index];}
Файл main.cpp:
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
#include <iostream>
#include "String.h"
using namespace std;
 
//клиентская часть.
int main(){
String obj = "Genius Ignat";
 
cout<<(const char*)obj<<endl;
String T_obj = obj;
unsigned int len = T_obj.len();
for(int i = 0 ; i < len; i++ )cout<<T_obj[i];
 
cout<<endl;
String UnkObj = "COM tech";
 
cout<<(const char*)UnkObj<<endl;
 
T_obj = UnkObj;
cout<<(const char*)T_obj<<endl;
T_obj ="End Sesion";
cout<<(const char*)T_obj<<endl;
 
return 0;
}
vladislavchick
35 / 35 / 1
Регистрация: 22.05.2010
Сообщений: 107
24.05.2010, 13:36     Классы и компоненты #3
Это только конструктор копий.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Пустая строка создаётся так:
string(unsigned n) {
    size = n;
    buff = new char[n];
}
//Деструктор:
~string() {
    delete [] buff;
}
//Оператор доступа к символам:
char operator[](unsigned n) {
    if (n < 0 || n >= size) {
        cout << "Ошибка! Индекс вне диапазона!";
        system("pause");
        exit(1);
    }
    return buff[n];
}
4aynik
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
27.05.2010, 10:05  [ТС]     Классы и компоненты #4
Genius Ignat, зачем в файле String.h вот это?

C++
1
2
String(const char *buff);           //конструктор с параметром.
String(const String& p);           //конструктор копирования.
Добавлено через 23 часа 5 минут
И зачем 2 раза на экран выводить Genius Ignat и COM tech???
Yandex
Объявления
27.05.2010, 10:05     Классы и компоненты
Ответ Создать тему
Опции темы

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