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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2015, 12:32   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Указатель на голову в классе, с++

Ребят, как сделать ввод списка при помощи метода перегрузки оператора+?
Изображения
Тип файла: jpg IMAG0252.jpg (39.2 Кб, 147 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 13:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну просто вместо функции или вместе с функцией push/add реализуете operator + и в нем либо пишете тоже самое, что и в функциях, либо вызывате их.
p51x вне форума Ответить с цитированием
Старый 11.06.2015, 13:30   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

вот все что есть, метод должен возвращать указатель на голову списка

*.h
Код:
#ifndef SPISOK
#define SPISOK

struct spisok
{
    int chislo;
    spisok *next;
};

class spp
{

public:
    spisok *HEAD;

    spp(struct spisok *one);
    spisok plus_peregruz(spp *metod);

};

#endif // SPISOK
*.cpp

Код:
#include "spisok.h"
#include <QCoreApplication>


spp::spp(struct spisok *one)
{
    if(!(HEAD))
        one->next=NULL;
    else
        one->next=HEAD;
    HEAD=one;
}

spisok plus_peregruz(spp *metod)
{

    metod->HEAD->chislo=spisok.chislo;
    metod->HEAD=metod->HEAD->next;

    return ;
}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 13:38   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
spisok plus_peregruz(spp *metod)
Что за бред? Вы думаете я тут выеживался, когда писал operator +? У перегрузки операторов есть свой синтаксис, почитайте что-нибудь...

Цитата:
вот все что есть
Тогда для вас плохие новости - это далеко не класс списка.
p51x вне форума Ответить с цитированием
Старый 11.06.2015, 13:50   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

перегруз пока слишком сложно, как в методе сделать склейку содержимого общего списка и вновь добавленного?

Код:
#include "spisok.h"
#include <QCoreApplication>


spp::spp(struct spisok *one)
{

    HEAD->chislo=one->chislo;

    if(!(HEAD))
        one->next=NULL;
    else
        one->next=HEAD;
    HEAD=one;
}

spisok plus_peregruz(spp *metod_classa)
{

    spisok *new_spisok;
    new_spisok=new spisok;

    new_spisok->chislo=metod_classa->HEAD->chislo;
    new_spisok=new_spisok->next;

    return *new_spisok;
}
from dark to light)

Последний раз редактировалось Алексей_2012; 11.06.2015 в 13:57.
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 14:04   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://lmgtfy.com/?q=c%2B%2B+%D1%81%...81%D0%BE%D0%BA
p51x вне форума Ответить с цитированием
Старый 11.06.2015, 15:04   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Я знаю что такое списки, но как их использовать в классе?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 15:34   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну ооткройте std::list и посмотрите, можете мишуру шаблонов убрать
p51x вне форума Ответить с цитированием
Старый 12.06.2015, 22:33   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ребят, i need your help!)

вот есть код, но я не могу разобраться в реализации некоторых методов.
возможно ли сделать склейку списка в одном методе?


*.h
Код:
#ifndef intlist_h
#define intlist_h

struct Listitem
{
	int data;
	Listitem* next;
};

class Intlist{
	public:
		Intlist(); //конструктор
		~Intlist();//деструктор
		void insert(int x, int item); 
		void add(int item);
		int count();
		int at(int x);
		int withdraw(int x);
		void clear();
	private:
		Listitem* first;
		Listitem* last;
		int N;
		Intlist clone();
};
#endif

зачем тут метод clone? прокомментируйте, пожалуйста, код

*.cpp
Код:
#include "intlist.h"
#include <stdexcept>

Intlist::Intlist(){
	first = NULL;
	last = NULL;
	N = -1;
}

Intlist::~Intlist(){
	clear();
}

void Intlist::insert(int x, int item){
	if((x<0)||(x>N+1)){
		throw std::out_of_range("out of range");
		return ;
	}
	Listitem* next = first;
	for(int i = 1; i<x; i++){
		next = next->next;
	}
	Listitem* newItem = new Listitem;
	newItem->next = next->next;
	newItem->data = item;
	next->next = newItem;
	N++;
}

int Intlist::count(){
	return N+1;
}

int Intlist::at(int x){
	if((x<0)||(x>N)){
		throw std::out_of_range("out of range");
		return -1;
	}
	Listitem* next = first;
	for(int i = 1; i<x; i++){
		next = next->next;
	}
	return next->data;
}

int Intlist::withdraw(int x){
	if((x<0)||(x>N)){
		throw std::out_of_range("out of range");
		return -1;
	}
	Listitem* next = first;
	for(int i = 1; i<x-1; i++){
		next = next->next;
	}
	int r = next->next->data;
	next->next = next->next->next; 
}

void Intlist::clear(){
	Listitem* next1 = first;
	Listitem* next0 = first;
	N = -1;
	while(next1!=last){
		next1 = next0->next;
		delete next0;
		next0 = next1;
	}
	delete last;
}

void Intlist::add(int item){
	last->next = new Listitem;
	last = last->next;
	last->next = NULL;
	last->data = item;
	N++;
}

Intlist Intlist::clone(){
	Intlist r = Intlist();
	Listitem* next = first;
	for(int i = 0; i<N; i++){
		r.add(next->data);
		next = next->next;
	}
	return r;
}
Ребят, подскажите, пожалуйста)
from dark to light)

Последний раз редактировалось Stilet; 13.06.2015 в 07:13.
Алексей_2012 вне форума Ответить с цитированием
Старый 13.06.2015, 07:13   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
зачем тут метод clone?
Для создания копии объекта. Или точнее клона его списка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы. Указатель на объект в классе. Son Помощь студентам 2 21.05.2013 18:45
Передать указатель на указатель в функцию erro Общие вопросы C/C++ 3 29.10.2012 17:59
Хочите поломати голову на ночь? ) NSvirus Свободное общение 1 14.09.2010 11:58
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
Всю голову сломал lesha_firs Общие вопросы Delphi 6 17.06.2009 16:59