Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с классами 
:(
    Опции темы
bobaddd
Дата 28.3.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Вообщем таки дела. Я в классах ни бум бум имею только общее представление.
Тема такая, мы работаем в BCW, проходим массивы (класс Array, AbstractArray и другие)
Вообщем в классе AbstractArray есть такая процедура removeEntry которая protected. Так вот, препод сказала использовать именно ее и никакую другую. Причем как я понял надо создать свой класс в него как бы ключить класс AbstractArray и сделать эту функцию public. Помогите плиз, я итак вертел и эдак, чето кучу ошибок выдает. Заранее спасибо. (При возможности прокоментируйте плиз)
PM MAIL   Вверх
BreakPointMAN
Дата 28.3.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



наследуешь свой класс от AbstractArray, потом в нем когда и где тебе нужно вызываешь функцию removeEntry
Добавлено @ 00:32
Быть может, эта тема поможет: Удаление выделенной строки в StringGrid, там реализуется нечто подобное.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
MAKCim
Дата 28.3.2006, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



если хочешь вызывать из внешей ф-ии removeEntry через свой класс наследуешь AbstractArray как public


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bobaddd
Дата 28.3.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Да это я понял, мне конкретно надо. Плиз, это же не много!


------------------------------------------------------------------------------------------------------------------------------
Вообщем как я понял, надо делать так

void main()
{
class NewClass: public AbstractArray
{};

Array A(5);
NewClass B(5); <-------(2 Errors)
..........................
..........................
};

Он выдает ошибки на помеченной строке:
1. Cannot create instance of abstract class 'NewClass'
2. Compilier couldn't generate default constructor for class 'NewClass'
-------------------------------------------------------------------------------------------------------------------------------

пробовал менять AbstractArray на Array (он является надмножеством для AbstractArray). 1-й Error пропал, 2-й остался такой же

Это сообщение отредактировал(а) bobaddd - 28.3.2006, 19:59
PM MAIL   Вверх
BreakPointMAN
Дата 28.3.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Судя по ошибке:
Цитата(bobaddd @ 28.3.2006, 19:49 Найти цитируемый пост)
1. Cannot create instance of abstract class 'NewClass'

...и тому, как ты наследуешь свой класс от AbstractArray:
Цитата(bobaddd @ 28.3.2006, 19:49 Найти цитируемый пост)
class NewClass: public AbstractArray
{};

...класс AbstractArray является абстрактным, а в классе-потомке NewClass ты не переопределяешь ни одной функции. Посмотри, какие функции в AbstractArray объявлены чисто виртуальными, что там не определено, и сделай это в своем классе.



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
bobaddd
Дата 28.3.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



тоесть мне надо переопределить removeEntry и сделать ее паблик?

--------------------------------------------------------------------------------------------------
Блин ребята, ну не знаю я, как это делается. Вы можете мне написать, я уже вертел и так и эдак - никак не работает.

Это сообщение отредактировал(а) bobaddd - 28.3.2006, 22:56
PM MAIL   Вверх
BreakPointMAN
Дата 28.3.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



bobaddd, есть код реализации класса AbstractArray? Если есть, кинь сюда. BCW стоит не у многих...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
bobaddd
Дата 28.3.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Файл Array.h Который подключает класс AbstractArray

/*------------------------------------------------------------------------*/
/* */
/* ARRAY.H */
/* */
/* Copyright Borland International 1991, 1992 */
/* All Rights Reserved */
/* */
/*------------------------------------------------------------------------*/

#if !defined( __ARRAY_H )
#define __ARRAY_H

#if defined( TEMPLATES )

#if !defined( __ARRAYS_H )
#include <Arrays.h>
#endif // __ARRAYS_H

#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif

#define Array BI_TCArrayAsVector
#define PArray PBI_TCArrayAsVector
#define RArray RBI_TCArrayAsVector
#define RPArray RPBI_TCArrayAsVector
#define PCArray PCBI_TCArrayAsVector
#define RCArray RCBI_TCArrayAsVector

_CLASSDEF( BI_TCArrayAsVector )

#define ArrayIterator BI_TCArrayAsVectorIterator
#define PArrayIterator PBI_TCArrayAsVectorIterator
#define RArrayIterator RBI_TCArrayAsVectorIterator
#define RPArrayIterator RPBI_TCArrayAsVectorIterator
#define PCArrayIterator PCBI_TCArrayAsVectorIterator
#define RCArrayIterator RCBI_TCArrayAsVectorIterator

_CLASSDEF( BI_TCArrayAsVectorIterator )

#else // TEMPLATES

#if !defined( __CLSTYPES_H )
#include <ClsTypes.h>
#endif // __CLSTYPES_H

#if !defined( __OBJECT_H )
#include <Object.h>
#endif // __OBJECT_H

#if !defined( __ABSTARRY_H )
#include <AbstArry.h>
#endif // __ABSTARRY_H

#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif

_CLASSDEF(Array)

class _CLASSTYPE Array : public AbstractArray

{

public:

Array( int upper, int lower = 0, sizeType aDelta = 0 ) :
AbstractArray( upper, lower, aDelta )
{
}

virtual void add( Object _FAR & );
void addAt( Object _FAR &, int );

virtual classType isA() const
{
return arrayClass;
}

virtual char _FAR *nameOf() const
{
return "Array";
}

};

#endif // TEMPLATES

#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po.
#endif
#pragma option -Vo.

#endif // __ARRAY_H

А вот файл AbstArry.h

/*------------------------------------------------------------------------*/
/* */
/* ABSTARRY.H */
/* */
/* Copyright Borland International 1991, 1992 */
/* All Rights Reserved */
/* */
/*------------------------------------------------------------------------*/

#if !defined( __ABSTARRY_H )
#define __ABSTARRY_H

#if defined( TEMPLATES )

#if !defined( __COLLECT_H )
#include <Collect.h>
#endif // __COLLECT_H

#if !defined( __MEM_H )
#include <Mem.h>
#endif // __MEM_H

#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif

_CLASSDEF(ostream)
_CLASSDEF(ContainerIterator)
_CLASSDEF(AbstractArray)
_CLASSDEF(ArrayIterator)

class _CLASSTYPE AbstractArray: public Collection
{

public:

friend class ArrayIterator;

virtual Object _FAR & operator []( int loc ) = 0;

virtual int lowerBound() const = 0;
virtual int upperBound() const = 0;
virtual sizeType arraySize() const = 0;

virtual void detach( int loc, DeleteType dt = NoDelete ) = 0;
virtual void detach( Object _FAR &, DeleteType dt = NoDelete ) = 0;
void destroy( int i )
{
detach( i, Delete );
}

int isEqual( const Object _FAR & ) const;
void printContentsOn( ostream _FAR & ) const;

};

#else // TEMPLATES

#if !defined( __COLLECT_H )
#include <Collect.h>
#endif // __COLLECT_H

#if !defined( __MEM_H )
#include <Mem.h>
#endif // __MEM_H

#if !defined( __CHECKS_H )
#include <Checks.h>
#endif // __CHECKS_H

#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif

_CLASSDEF(ostream)
_CLASSDEF(ContainerIterator)
_CLASSDEF(AbstractArray)
_CLASSDEF(ArrayIterator)

class _CLASSTYPE AbstractArray: public Collection
{

public:

AbstractArray( int, int = 0, sizeType = 0 );
virtual ~AbstractArray();

Object _FAR & operator []( int ) const;

int lowerBound() const
{
return lowerbound;
}

int upperBound() const
{
return upperbound;
}

sizeType arraySize() const;

virtual void detach( Object _FAR &, DeleteType = NoDelete );
virtual void detach( int, DeleteType = NoDelete );
void destroy( int i ) { detach( i, DefDelete ); }
virtual void flush( DeleteType = DefDelete );

virtual int isEqual( const Object _FAR & ) const;
virtual void printContentsOn( ostream _FAR & ) const;

virtual ContainerIterator _FAR & initIterator() const;

protected:

Object _FAR & objectAt( int i ) const
{
return *theArray[ zeroBase(i) ];
}

Object _FAR *ptrAt( int i ) const
{
return theArray[ zeroBase(i) ];
}

int find( const Object _FAR & );

void reallocate( sizeType );

void setData( int, Object _FAR * );

void insertEntry( int );
void removeEntry( int );
void squeezeEntry( int );

sizeType delta;
int lowerbound;
int upperbound;
int lastElementIndex;

private:

Object _FAR * _FAR *theArray;

int zeroBase( int loc ) const
{
PRECONDITION( loc >= lowerbound && loc <= upperbound );
return loc - lowerbound;
}

int boundBase( unsigned loc ) const
{
PRECONDITION( loc == UINT_MAX || loc <= upperbound - lowerbound );
return loc == UINT_MAX ? INT_MAX : loc + lowerbound;
}

friend class ArrayIterator;

};

inline Object _FAR & AbstractArray::operator [] ( int atIndex ) const
{
return objectAt( atIndex );
}

inline sizeType AbstractArray::arraySize() const
{
return sizeType( upperbound - lowerbound + 1 );
}

class _CLASSTYPE ArrayIterator : public ContainerIterator
{

public:

ArrayIterator( const AbstractArray _FAR & );
virtual ~ArrayIterator();

virtual operator int();
virtual Object _FAR & current();
virtual Object _FAR & operator ++( int );
virtual Object _FAR & operator ++();
virtual void restart();

private:

int currentIndex;
const AbstractArray _FAR & beingIterated;

void scan();

};

#endif // TEMPLATES

#if defined( __BCOPT__ ) && !defined( _ALLOW_po )
#pragma option -po.
#endif
#pragma option -Vo.

#endif // __ABSTARRY_H


PM MAIL   Вверх
threef
Дата 30.3.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



1.Класс создавать внутри main можно но как бы не принято.
2.Класс - это тип данных. Требуется еще и переменная, называемая обьектом или экземпляром класса.
3.Все методы(функции), записанные как =0 называются чисто виртуальными, класс, содержащий такие методы - абстрактным. Нельзя создать экземпляр абстрактного класса. Для создания неабстрактного класса - наследника нужно создать самому все абстрактные методы.
4.Для получения доступа к защищенному методу из класса-наследника создают в нем публичный метод
Код


class A{
protected:
  void X(){cout<<"A\n"};
};
class B:public A
{
  public:
   void X(){
          A::X();// Вызов метода предка
          cout<<"B\n"; 
               }
};

B exemplar;
main()
{
   exemplar.X();
}



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.