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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
4aynik
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
#1

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

24.05.2010, 13:26. Просмотров 393. Ответов 3
Метки нет (Все метки)

Для класса

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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2010, 13:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы и компоненты (C++):

Инкапсуляция. Классы и их компоненты. Объекты - C++
Здравствуйте. Помогите пожалуйста.Вот есть у меня задание: Разработать класс, инкапсулирующий свойства одномерного динамического...

Упорядочить компоненты вектора так, чтобы сначала размещались все отрицательные компоненты, а затем положительные - C++
заранее спасибо! кто поможет мне с задачей Дан вектор Х(а1,а2...аn)(n=100) упорядочить компоненты вектора так, чтобы сначала размещались...

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include <iostream> class Point { public: void SetX(int...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы - C++
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Наследование, базовые классы и производные классы - C++
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Genius Ignat
1236 / 774 / 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???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 10:05
Привет! Вот еще темы с ответами:

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include &lt;iostream&gt; class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

Файл: Найдите номер первой положительной компоненты файла и номер последней положительной компоненты файла - C++
Организуйте заполнение типизированного файла случайными целыми числами из интервала . Выведите содержимое файла на экран. Найдите номер...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.05.2010, 10:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru