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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Двунаправленное кольцо http://www.cyberforum.ru/cpp-beginners/thread403852.html
задание: 1. Реализовать с использованием массива двунаправленное кольцо (просмотр возможен в обе стороны, от последнего элемента можно перейти к первому). 2. Распечатать полученный массив, начиная с К-ого элемента и до К-1 ( по кольцу влево). 3. Удалить из кольца первый и последний элементы 4. Распечатать полученный массив, начиная с К-ого элемента (и до К+1 по кольцу вправо). есть...
C++ Строку в массив Суть: нужно ввести строку скажем hello, так чтобы каждый символ загнать в массив. Помогите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread403851.html
Инициализировать массив быстро? C++
Возможно ли инициализировать все элементы массива каким-то числом быстрее, чем через цикл? Как это можно сделать? Если нельзя, то как лучше это сделать в цикле-помещать локальные переменные счетчика и числа в процессорные регистры?
C++ Сортировка линейного однонаправленного списка
Всем привет) Нужно отсортировать линейный однонаправленный список. Как это можно сделать? Причем нужно менять местами не данные, а указатели.. Вот код программы, список структур. Помогите плиз с сортировкой #include "stdafx.h" #include <clocale> #include <iostream>
C++ [C++] Арканоид http://www.cyberforum.ru/cpp-beginners/thread403817.html
Здравствуйте, я самый на то есть начинающий программист,поэтому сразу прошу прощения, если вопросы будут не очень коректными.Очень расчитываю на вашу помощь. Задача состоит в следующем. Нужно написать Арканоид на VisualС++(в игре должна присутствовать простая минюшка и хотябы два, три уровня.Причём написание нового уровня не должно сводиться к переписанию половины кода).Нужно использовать движок...
C++ Найти и вывести координаты центра окружности Друзья, нужна помощь. Девушке задали лабы по СИ, она не шарит. Знакомых всех спросил, никто не может помочь. Вот она: 1. Диаметр окружности начинается в точке М1(x1,y1) и кончается в точке M2(x2,y2). Найти и вывести координаты её центра. 2. Числа X1 и X2 являются корнями приведенного квадратного уравнения. Найти и выве-сти наибольшее из чисел: sin(p) и cos(q), где p и q являются его вторым и... подробнее

Показать сообщение отдельно
Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
14.12.2011, 17:33     наследование-нужна помощь
Здравствуйте. Помогите пожалуйста дописать производный класс. Осталось дописать конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); метод, преобразующий данную строку в целое десятичное число, сложение (+) — арифметическая сумма строк; операция (==) — проверка на равенство.
Само задание: Описать базовый класс 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 минуты
все разобралась помощь больше не нужна)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru