Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 23:51   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение Указатель на абстрактный класс

1.cpp - реализация "умного" указателя.
2.сpp - базовый абстрактный и 2 производных.

Проблема: в строке Aptr<base> ptr; не передается значение count и pointer.( см. main() ) Что не так?

1.сpp
Код:
template <typename type>

class Aptr
{
private:

	class A {

public:
	A(type *some_pointer):pointer(some_pointer),count(1){}
	~A(){delete pointer;}
	void add(){ ++count;}
	bool del()
	{ 
		return --count==0;
	}
	type * get ()  { return pointer; }

private:
	int count;
	type *pointer;
	};

public:
	Aptr(){ aptr = 0;}
	Aptr(type *some_pointer) { aptr = new A(some_pointer);}
	Aptr (const Aptr &some_Aptr) { aptr=0; cop(some_Aptr);}
	~Aptr(){ del();}

	type *operator ->() {return aptr->get();}
	type & operator * () { return *aptr->get; }
	Aptr & operator = (const Aptr &some_Aptr) { cop(some_Aptr); return *this;}

protected:
	 void add() {if(aptr) aptr->add();}
	 void del(){ if(aptr && aptr->del()) delete aptr;}
   void cop(const Aptr &some_Aptr)
   {
	   aptr = some_Aptr.aptr;
	   add();
	   del();
   }

private:
	A *aptr;
};
2.cpp
Код:
class base	
{
public:
	int n;
	base(){n=0;}
	virtual ~base(){}
	virtual void AddDate()=0;
	virtual void print()=0;
	virtual void WeightSort(){}
};
class first:public base
{
public:
	first(){naznachenie=NULL; weight=NULL;}
	virtual ~first();
	void AddDate();
	void print()
	{
		for(int i=0;i<n;i++)
		cout<<"naznachenie: "<<naznachenie[i]<<"; weight: "<<weight[i]<<endl;
	}
	void WeightSort(); 
private:
	char **naznachenie;
	int *weight;
};
class second:public base
{
public:
	second(){adress=NULL;}
	virtual ~second();
	 void AddDate();
	void print(){
		for(int i=0;i<n;i++)
			cout<<"name: "<<name[i]<<"; adress:"<<adress[i]<<endl;}
private:
	char **name;
	char **adress;
};
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
абстрактный класс С++ zhenya.ya Помощь студентам 0 05.11.2010 20:23
[C++] Указатель на производный класс в базовом Student_IT Общие вопросы C/C++ 3 06.06.2010 07:06
Указатель на класс Колючка* Общие вопросы Delphi 8 21.01.2010 07:38
Наследование: абстрактный класс zak Общие вопросы C/C++ 4 22.12.2007 13:49