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

наследование-нужна помощь - C++

Восстановить пароль Регистрация
 
Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
14.12.2011, 17:33     наследование-нужна помощь #1
Здравствуйте. Помогите пожалуйста дописать производный класс. Осталось дописать конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); метод, преобразующий данную строку в целое десятичное число, сложение (+) — арифметическая сумма строк; операция (==) — проверка на равенство.
Само задание: Описать базовый класс CStr – строка Описать производный от СStr класс CSStr – шестнадцатеричная строка. Строки данного класса могут содержать только шестнадцатиричные символы. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, строка принимает нулевое значение. Содержимое данной строки рассматривается как знаковое шестнадцатеричное число.. Класс CSStr содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; деструктор, метод, преобразующий данную строку в целое десятичное число. Переопределить следующие операции: присваивание (=); сложение (+) — арифметическая сумма строк; операция (==) — проверка на равенство. Написать демонстрационную программу.

Вот моя прога:
Str.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
class CStr
{protected: 
int len;//Поле для хранения длины сроки 
        char* s;//Поле для хранения строки
        
public:
        CStr();//Kонструктор без параметров
        CStr( const char*);//Конструктор создания строки, равной заданной С- строке
        CStr(const CStr&);//Kонструктор копирования
        CStr& operator=(const CStr&);// Операция присваивания
        bool operator ==(CStr &);//сравниваем объект  класса с произвольной символьной строкой
        void empty();// Метод, делающий строку пустой
        ~CStr(){delete[]s;}//Деструктор
        const char * get_str()  const {return s;} //Метод  получения строки
        int get_len() const {return len;}// Метод получения длины строки
        void vivod ();
};
bool operator ==( const CStr &, const CStr & );//сравниваем объект  класса с произвольной символьной строкой

Str.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "StdAfx.h"
#include "Str.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
// Конструктор создания пустой строки
CStr::CStr():len(0), s( new char[1] )
{
   *s='\0'; cout<<"\nContructor1";
}
 
// Конструктор создания строки, равной заданной С- строке
CStr::CStr(const char* a) : len( strlen( a ) ), s( new char[len+1] )
{
        strcpy(s,a);
        cout<<"\nContructor2";
}
 
// Конструктор копирования
CStr::CStr(const CStr& a) : len( a.len ), s( new char[len+1] )
{
   strcpy(s,a.s);
   cout<<"\nContructor3 ";
}
// Операция присваивания
CStr& CStr::operator = (const CStr & a)
{
        if (&a==this)  return *this;
        delete []s;
        
        s=new char [a.len];
        strcpy(s,a.s);
        cout<<" \nDONE == ";
        return *this;
}
 
// Метод, делающий строку пустой
void CStr::empty()
{ if (len)   
        { len = 0; delete []s; s = new char; *s= '\0';} 
}
 
// Операция записи в поток вывода на экран
 ostream& operator<<(ostream& a, CStr& x)
 {a << x.get_str();
 return a;}
 
 //сравниваем объект  класса с произвольной символьной строкой
bool operator ==(const CStr & lhs, const CStr &rhs)
{
   return ( strcmp( lhs.get_str(), rhs.get_str() ) == 0 );
}
 
//вывод
void CStr::vivod ()
{    int n=strlen(s);
    for (int i=0; i<n; i++)
    cout<<s[i];    
}
SStr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <iostream>
#include "Str.h"
using namespace std;
 
 
class CSStr:public CStr
{public:
CSStr(); //конструктор без параметров !
int get_len() {return len;}; // получение длины строки
~CSStr (){delete []s; cout<<"\ndestructor\n";} //деструктор!
CSStr(const CSStr &); // конструктор копирования!
CSStr (char* a);//конструктор, принимающий в качестве параметра Си-строку 
CSStr & operator=(CSStr &); // присваивание (=)!
operator int();//метод, преобразующий данную строку в целое десятичное число. 
CSStr & operator+( const CSStr& );//сложение (+) — арифметическая сумма строк; 
void vivod();// вывод
};
SStr.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
30
31
#include <string>
#include <cctype>
#include <conio.h>
#include <stdio.h>
using namespace std;
 
 
CSStr::CSStr() // конструктор без параметров
{    s = new char;
    *s = '\0'; 
    len = 0;
    cout<<"contructor bez parametra\n";
}
 
CSStr::CSStr(const CSStr & a) // конструктор копирования
{     s=new char[len=a.len];
    strcpy(s,a.s);
    cout<<"contructor kopirovanija\n";
}
 
CSStr& CSStr::operator = (CSStr & a) //присваивание (=)
{  CStr::operator=(a);
    return *this;
}
 
 
void CSStr::vivod () //вывод
{    int n=strlen(s);
    for (int i=0; i<n; i++)
    cout<<s[i];    
}
Добавлено через 32 секунды

Добавлено через 6 часов 37 минут
сделала для производного класса //конструктор принимающий в качестве параметра Си-строку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CSStr::CSStr (char* a)  
{int k=0;
    len=strlen(a);
    if (a[0]>='0'&& a[0]<='9'||a[0]>='A'&& a[0]<='F' )  //проверяем первый символ, является ли он буквой
        {s=new char[len+1];
         s[k]=a[0];
        for (int i=1; i<len; i++) //просматриваев выражение cлева направо
        {if (a[0]>='0'&& a[0]<='9'|| a[0]>='A'&& a[0]<='F') {k++; s[k]=a[i];}   //isalpha(x), функция описанная в сtype.h, проверяет,является ли x латинской буквой
                else {int atoi(a[i]); //перевод в тип int;
                if (a[0]>='0'&& a[0]<='9'|| a[0]>='A'&& a[0]<='F') {k++; s[k]=a[i];}
                else {if (a[i]=='_') {k++; s[k]=a[i];} 
                else "Введено не верно"; } 
}
}
 s[len]='\0';
}
else  {cout<<" \n Не шестнадцатеричная строка \n";}
}
Добавлено через 5 часов 54 минуты
все разобралась помощь больше не нужна)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 17:33     наследование-нужна помощь
Посмотрите здесь:

C++ НУЖНА ПОМОЩЬ В С++
C++ Нужна помощь.
C++ Нужна помощь
Нужна помощь C++
C++ Нужна помощь.
C++ Нужна помощь
Нужна помощь C++
C++ Нужна помощь

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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