Funkcja poza klasą działająca na elemencie klasy

0

Mam problem z pewnym projektem. Mam w nim klasę, która zawiera tablicę string i kilka funkcji działających na niej. Muszę teraz napisać funkcję, która sortuje tę tablicę, ale są dwa warunki:

  1. Funkcja nie ma znajdywać się w klasie.
  2. Funkcja za argument powinna przyjmować tablicę, a nie kopiec.
    Jak mogę to zrealizować?
0
  1. Metoda zwracająca pole klasy
  2. Przyjaźń
  3. Publiczne pole
  4. Wyciągnięcie bajtów z obiektu na których znajduje się pole i zinterpretowanie ich jako konkretny typ
  5. Przesył do globalnej zmiennej za pomocą wskaźnika bądź referencji
  6. Przesył do innego obiektu (przesłanego do funkcji) za pomocą wskaźnika bądź referencji, która będzie udostępniona na jednej z powyższych zasad
  7. ^ lambda capturing
    Opcji jak sam widzisz niestety niewiele.
0

Przyznam, ze niezbyt rozumiem.
Jesli "wywalasz" prywatna skladowa klasy na zewnatrz to tak naprawde przestaje ona byc prywatna.
Kto inny powinien sortowac dane, jesli nie ich "wlasciciel"?

0
tajny_agent napisał(a):

Przyznam, ze niezbyt rozumiem.
Jesli "wywalasz" prywatna skladowa klasy na zewnatrz to tak naprawde przestaje ona byc prywatna.
Kto inny powinien sortowac dane, jesli nie ich "wlasciciel"?

Jeśli tak rygorystytcznie podchodzisz do prywatności, to dlaczego chcesz, aby coś z zewnątrz sortowało twoje dane?

0

Nie, nie. Ktos z zewnatrz moze tylko podac warunek sortowania. Samym sortowaniem niech sie zajmie obiekt, bez koniecznosci udostepniania swoich "bebechow" ;-)

0

podmień std::sort na swojego i już

#include <iostream>
#include <vector>
#include <algorithm>

struct A
{
    A() : vec { 10, 9, -3, 19, -10 } {}

    void sortMe();
   
    void printMe();
private:
    std::vector<int> vec;
};

void A::sortMe()
{
    // global sort
    std::sort(std::begin(vec), std::end(vec), std::less<int>());
}

void A::printMe()
{
    for(auto const& e: vec) {
        std::cout << e << " ";
    }
}

int main()
{
    A a;
    a.sortMe();
    a.printMe();
    
    return 0;    
}

http://melpon.org/wandbox/permlink/cQL5TFZtaFNKd1IP

1
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;


class Oh{
private:
	vector<int> _v = {0, 3, 6, 2, 0xC0DE};
public:
	auto you() const -> void{ for_each(begin(_v), end(_v), [](auto e){ cout << e << " "; }); }
	auto v() const -> const decltype(_v) &{ return _v; }
	auto v() -> decltype(_v) &{ return _v; }
};

int main(){
	Oh oh;
	sort(begin(oh.v()), end(oh.v()));
	oh.you();
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1