Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2012 19:53:00

Armany
От:
Зарегистрирован: 2011-12-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python в C++

Помогите если не трудно перевести етот код в C++. Я недавно начал его учить и мне нужно один раз увидеть как это делается…;)

class Node:		
	def __init__(self,initData,initPrevious = None,initNext = None):
		self.data = initData
		self.next = initNext
		self.previous = initPrevious
	def getData(self):
		return self.data
	def getNext(self):
		return self.next
	def getPrevious(self):
		return self.previous
	def setData(self,newdata):
		self.data = newdata
	def setNext(self,newnext):
		self.next = newnext
	def setPrevious(self,newprevious):
		self.previous = newprevious
		
	def __str__(self):
		return str(self.data)



Офлайн

#2 Апрель 7, 2012 06:43:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python в C++

template<class T>
class Node
{
T* data,*next,*previous;
public:
Node(T *initData,T *initPrevious ,T *initNext):data(initData),previous(initPrevious) ,next(initNext){}
T* getData() const {return data;}
T* getNext() const {return next;}
void setData(T *newdata){data=newdata;}
void setNext(T *newdata){next=newdata;}
operator string() const {return string(*data);}
};



Отредактировано doza_and (Апрель 7, 2012 06:43:56)

Офлайн

#3 Апрель 8, 2012 21:56:24

Armany
От:
Зарегистрирован: 2011-12-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python в C++

выдает ошибку: “ ‘Node’ is not a template type ” :S



Офлайн

#4 Апрель 9, 2012 21:53:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python в C++

А у меня никаких ошибок. vc10,g++ 4.5.2 :)
operator string() const {return string(*data);} комментировал чтобы не возиться с преобразованием в строку.
Напишите что делали чтобы в этом коде получить ошибку.



Офлайн

#5 Апрель 10, 2012 12:40:41

Armany
От:
Зарегистрирован: 2011-12-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python в C++

Честно говоря я попробовал сделать немного по другому но всё равно не выходит. Не подскажите где я ощибаюсь ? У меня CodeBlocks.

Node.hpp

#ifndef NODE_HPP
#define NODE_HPP
#include <iostream>
using namespace std;
class Node
{
    public:
        Node();
        Node(int data,int previous,int next);
        double getData() const;
        double getNext() const;
        double getPrevious() const;
        void setData(int data);
        void setNext(int next);
        void setPrevious(int previous);
        friend std::ostream& operator <<(std::ostream&, const Node& data);
    private:
        int data,previous,next;
};
#endif // NODE_HPP]

Node.cpp
#include "Node.hpp"
#include <iostream>
using namespace std;
Node::Node() : initData(0), initPrevious(0), initNext(0)
{}
Node::Node(int data,int previous,int next): data(initData),previous(initPrevious) ,next(initNext)
{}
double Node::getData() const
{
    return this->data;
}
double Node::getNext() const
{
    return this->next;
}
double Node::getPrevious() const
{
    return this->previous;
}
void Node::setData(int data)
{
    this-> initData=data;
}
void Node::setNext(int next)
{
    this->initNext=next;
}
void Node::setPrevious(int previous)
{
    this->initPrevious=previous;
}
std::ostream& operator <<(std::ostream& str, const Point& data)
{
    str << data;
    return str;
}



Отредактировано Armany (Апрель 10, 2012 12:41:16)

Офлайн

#6 Апрель 10, 2012 23:14:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python в C++

Ну первое что бросается в глаза
Node::Node() : initData(0), initPrevious(0), initNext(0)
initData - нигде не определена надо data(0) именно такое поле есть в классе.
Node::Node(int data,int previous,int next): data(initData),
тоже перепуталось то что инициализируется с тем чем оно инициализируется
надо примерно так:
Node::data(::data) тут получилось одинаковое название переменной класса и аргумента конструктора
А лучше их называть по разному:
Node::Node(int data_value,int previous,int next): data(data_value),

using namespace std;
std::ostream& operator
если уж заюзали std дальше можно писать ostream вместо std::ostream.

Лично мне кажется что тут вообще ни к чему явоподобный гемморой. Пишите проще!

class Node
{
public:
Node():previous(0),next(0){}
int previous,next;
};
Методы доступа сделаете когда будет к этому веское основание.



Отредактировано doza_and (Апрель 10, 2012 23:15:19)

Офлайн

#7 Апрель 12, 2012 13:20:13

Armany
От:
Зарегистрирован: 2011-12-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python в C++

doza_and
Ну первое что бросается в глаза
Node::Node() : initData(0), initPrevious(0), initNext(0)
initData - нигде не определена надо data(0) именно такое поле есть в классе.
Node::Node(int data,int previous,int next): data(initData),
тоже перепуталось то что инициализируется с тем чем оно инициализируется
надо примерно так:
Node::data(::data) тут получилось одинаковое название переменной класса и аргумента конструктора
А лучше их называть по разному:
Node::Node(int data_value,int previous,int next): data(data_value),

using namespace std;
std::ostream& operator
если уж заюзали std дальше можно писать ostream вместо std::ostream.

Лично мне кажется что тут вообще ни к чему явоподобный гемморой. Пишите проще!
class Node
{
public:
Node():previous(0),next(0){}
int previous,next;
};
Методы доступа сделаете когда будет к этому веское основание.


Спасибо я всё исправил =) А возможно чтоб вместо init…(0) было None ?



Отредактировано Armany (Апрель 12, 2012 13:20:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version