Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Mufa TV

PPC Energy

Chefi de la Antena 1 s-au intors ...

Camera conferinta Tenveo tevo-vl12u
 Recomandare rulouri exterioare us...

Telefon performant pe parte audio...

Aspecte legale https://registratu...

Filtru de apa curata apa de miner...
 Unde gasesc borcane mari 5 - litr...

sfat achiziție bicicleta pli...

NVIDIA Shield Programe Romania IP

Se opreste motorul in mers Golf 5
 Probleme cu instalator Casa verde

Linie vinetie mana stanga

Opriri și reporniri dese

Protectie soare/vizuala in interior
 

contructor c++ 11

- - - - -
  • Please log in to reply
2 replies to this topic

#1
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
Salutare tuturor,
Ma confrut cu urmatoarea problema, Trebuie sa construiesc o serie de clase A,B,C,D derivate avand ca forma
A
/ \
B C
\   /
D
unde singurii atributi (privati) sunt un vector v<type t> vec si dimensiunea vectorului. Dimensiunea evident nu e prea necesara, putand fi accesata prin metoda .size() a vectorului.
Nu  discut aici capcanele mostenirii in diamant pentru fiecare metoda, dar sunt curios asupra coding-styleului  constructorilor, in special celor care iau ca parametrii un iterator.
De exemplu:
D d = new D(parametri standard(int,double,float,string...));
D e = new D(d.begin(),d.end());

Dupa mine clasa D (sau A de exemplu) ar trebui sa aiba un overload a metodei <<begin()>> unde se returneaza primul element al obiectului respectiv, si <<end()>> unde se returneaza ultimul element.
Asta ar insemna ca in constructorul clasei ar trebui sa se itereze de la begin() pana la end() si valorile recuperate sa fie bagate in vectorul vec (prin push_back(..)).
Cum ar trebuii sa arate codul acestui constructor?  Daca aveti niste piste (nu vreau mura-n gura) v-as fi recunoscator.

Multumesc anticipat

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,226
  • Înscris: 24.02.2007
#include <iostream>
#include <vector>
#include <initializer_list>

using namespace std;

template<typename T>
class X
{
private:
	vector<T> _data;
public:
	X(initializer_list<T> list) : _data(list) { }
	template<typename It>
	X(It start, It end) : _data(start, end) { }
	void print()
	{
		for (T x: _data)
		{
			cout << x << " ";
		}
		cout << endl;
	}
};

int main()
{
	X<int> x({1, 2, 3});
	x.print();

	vector<int> v({4, 5, 6});
	X<int> y(begin(v), end(v));
	y.print();

	int a[] = {7, 8, 9};
	X<int> z(begin(a), end(a));
	z.print();

	return 0;
}


Quote

1 2 3
4 5 6
7 8 9

Edited by dani.user, 29 July 2014 - 17:40.


#3
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
Multumesc pentru raspuns,
Exista vreo solutie alta ca type_info(..) ca sa ma asigur ca in cazul unui iterator de exemplu pe un char, nu ma aleg cu o eroare in cazul in care construiesc un int?
X<char> a=({'a','b','c','d','e'});
X<int> b (begin(a),end(a));


Edited by dilo00o, 29 July 2014 - 00:59.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate