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

наследование С++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевести задачу на C++ http://www.cyberforum.ru/cpp-beginners/thread383776.html
Помогите перевести данную программу на c++ вся трудность в том что не знаком с синтаксисом С++ http://s017.***********/i444/1111/26/171e3a9bb4b9.png
C++ Устная задачка) Помогите пожалуйста. Мне нужно построить область, удовлетворяющую неравенствам: x<=2, y<x, y>=1/x. И самое смешное в том, что я не могу просчитать это математически))) помогите пожалуйста!!! Как мне постоить этот график? Если не сложно, то сделайте простенький чертеж, например в паинте)) http://www.cyberforum.ru/cpp-beginners/thread383758.html
MS VISUAL C++ и Builder C++ C++
Всем привет, я программирую на delphi, решил начать изучать C++, я выучил самые основы на dev С++, тоесть писал консольные программы :) Теперь хочу перейти за кокой нить компилятор посерьезнее между MS VISUAL C++ и Builder C++ , если я начну программировать на Builder C++ т.к после delphi на нем будет легче чем на MS VISUAL C++ , При изучении Builder C++ потом мне лугко будет перейти на MS...
задача C++
В строке записано латинскими буквами нестрого фамили, имя и отчество через пробел (Имя может стоять и в начале и в конце и в середине). Требуется написать программу, определяющую положение начального символа слова 'Ivan' в строке символов (Номер позиции, с которой начинается слово Ivan).
C++ простая задачка http://www.cyberforum.ru/cpp-beginners/thread383723.html
Требуется написать программу, определяющую количество символов до точки. Точка в строке одна.
C++ WinAPI Положение консоли. Нужно, чтобы консоль открывалась каждый раз ближе к левому верхнему углу экрана. Как задать положение? Ещё вопрос-если вывести много информации, то колесо прокрутки исчезает, то есть можно увидеть только последнюю часть. Как это исправить? подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
14.11.2011, 20:34     наследование С++
Цитата Сообщение от Lennadij Посмотреть сообщение
в общем вот, я так понимаю описание производного класса будет еще сложнее?!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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


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
#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;
        if (len) delete []s;
        s=new char [len=a];
        strcpy(s,a.s);
        cout<<" \nDONE == ";
        return *this;
}
 
// Операция сравнения строк
bool CStr::operator ==(CStr & st)
{
if (strcmp (s, st.s)==0) return true;
return false;
}
 
// Метод, делающий строку пустой
void CStr::empty()
{ if (len)   
        { len = 0; delete []s; s = new char; *s= '\0';} 
}
 
// Операция записи в поток вывода на экран
ostream& operator<<(ostream& a, CStr& x)
{return a<<x.s;}
 
bool operator ==(const CStr & lhs, const CStr &rhs )
{
   return ( strcmp( lhs.get_str(), rhs.get_str() ) == 0 );
}
Вам надо удалить из класса ваш оператор сравнения, так как мы его заменили глобальным оператором сравнения, а в операторе присваивания вы ошибку не исправили.

Следующий код в операторе присваивания

C++
1
        if (len) delete []s;
некорректный, так как, как я уже писал, len может быть равной 0, но тем не менее вы выделяли память для хранения нулевого символа в строке s. Поэтому удалять память нужно безусловно.

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