Ребят...кто-нибудь знает на форуме Объектно Ориентированное Программирование?
Скоро зачёт, а я не могу доделать задание=(
Вот само задание:
Описать базовый класс CStr – строка . Описать производный от CStr класс CСomplex– комплексное число. Строки данного класса состоят из двух полей, разделенных символом i. Каждое из полей может содержать только символы десятичных цифр и символы + и -, задающие знак числа. Символы + и – могут находиться только в первой позиции числа, причем символ + может отсутствовать. Если исходные данные противоречат правилам записи комплексного числа, то комплексное число принимает нулевое значение. Класс CStr_ID содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; деструктор. Переопределить следующие операции: присваивание (=); операция (==) – проверка на равенство; умножение (-). Написать демонстрационную программу.
Я кое-как сделала базовый класс, а вот с производным проблемы..Вообще не знаю как написать.
P.S Если есть такие люди на форуме отзовитесь пожалуйста...
Вот что я сделала:
Str.cpp #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 [len=a];
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 );
}
Str.h #pragma once
#ifndef __Str_H
#define __Str_H
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();
const char * get_str() const {return s;} //Метод получения строки
int get_len() const {return len;}// Метод получения длины строки
~CStr(){delete[]s;}//Деструктор
};
bool operator ==( const CStr &, const CStr & );
#endif