Składnik statyczny względem klasy wewnętrznej - czy to w ogóle możliwe?

0

Hej, mam do Was takie pytanie..
Mam klasę zagnieżdżoną w innej klasie, czy jest możliwe aby klasa wewnętrzna posiadała składnik statyczny tylko względem niej?
Chodzi mi o to żeby, ten składnik był osobny dla każdego obiektu klasy zewnętrznej, jednocześnie będąc statyczny dla obiektów klasy wewnętrznej.
Gdzie należy umieścić jego definicję? Jak tym operować? Czy da się zrobić tego typu funkcję?

2

Masz definicję klasy w klasie? To bardzo mało różni się od kompletnie niepowiązanych dwóch definicji klas. Z tego co piszesz to po prostu chcesz wystawić wartość jednej klasy dla obiektów innej, ale bez kodu (np. przykładu użycia) ciężko mieć pewność.

3

Trochę mi to pachnie "przekombinowaniem". Ale jeśli napiszesz co dokładnie chcesz osiągnąć, zasugeruję rozwiązanie.
Wracając do pytania, da się ale trzeba będzie posiłkować się szablonami. Ale powinieneś mieć poważny powód.

Napisz czego potrzebujesz a nie jakiego rozwiązania się domyślasz :)

3
Zeszyt_w_kratkę napisał(a):

Hej, mam do Was takie pytanie..
Mam klasę zagnieżdżoną w innej klasie, czy jest możliwe aby klasa wewnętrzna posiadała składnik statyczny tylko względem niej?
Chodzi mi o to żeby, ten składnik był osobny dla każdego obiektu klasy zewnętrznej, jednocześnie będąc statyczny dla obiektów klasy wewnętrznej.
Gdzie należy umieścić jego definicję? Jak tym operować? Czy da się zrobić tego typu funkcję?

Za bardzo pomieszałeś. Jeśli jakiś składnik klasy jest statyczny to oznacza, że istnieje jeden i tylko jeden, wspólny dla wszystkich instancji tej klasy egzemplarz. Świat zewnętrzny, czyli jakieś klasy zawierające taką klasę, nie ma tutaj już nic do rzeczy.

Może opisz autorze jakie zagadnienie chcesz rozwiązać, bo coś mi tu pachnie problemem XY

0
#include <iostream>
#include <string>
using namespace std;

class my_list
{
    struct element
    {
        string name;
        string surname;
        element *next;

        element(const string& name, const string& surname)
            : name(name), surname(surname), next(nullptr) {};
    };

    element *root;
    element *tail;//
    

public:
	
    my_list() : root(nullptr),tail(nullptr) {el_num=0;}//
    
    ~my_list()
    {
        element *temp = root;
        while (temp)
        {
            element *current = temp;
            temp = temp->next;
            delete current;
        }
    }

    void print()
    {
        element *temp = root;
        while (temp)
        {
            cout << temp->name << " " << temp->surname << "\n";
            temp = temp->next;
        }
    }

    void add(const string& name, const string& surname)
    {
        element *el = new element(name, surname);
    	el->next = root;
        root = el;
        if(tail==nullptr)//
        	tail = el;//
    }
    void insert(const string& name, const string& surname)//
    {
    	element *el = new element(name, surname);
    	tail->next=el;
    	el->next=nullptr;
    	el=tail;
    	if(root==nullptr)
    		root=el;
    }
    /*
    string find(int num)//
    {
		element *temp = root;
		for(int i=0;i<num;++i)
			temp=temp->next;
    }
    */
    int el_num;
};

int main()
{
    my_list list;
    list.add("Grzegorz", "G.");
    list.add("Tomasz", "T.");
    list.add("Andrzej","W.");
    list.insert("Michal", "T.");
    list.print();
    return 0;
}

Chodzi mi o to żeby umieścić licznik elementów dla każdej z list. Wołam @grzesiek51114 bo to rozwinięcie twojego kodu.
https://4programmers.net/Forum/Off-Topic/Oceny_i_recenzje/324943-prosze_o_konstruktywna_krytyke_mojej_listy?p=1581051#comment-492483

1

Chodzi mi o to żeby umieścić licznik elementów dla każdej z list.

W zasadzie starczy przy każdym wstawieniu zrobić licznik++ gdzie licznik jest polem klasy.

1

Nie w konstruktorze?

  • Ustaw w konstruktorze licznik na zero;
  • Zwiększaj licznik po każdym wstawieniu.
0

Czyli z kasowaniem podobnie? Licznik zmniejszać w delete, nie w destruktorze elementu? W ogóle struktur może mieć destruktor?

0

Ale mam tu na myśli napisanie destruktora dla elementu, destruktor całej listy już jest

3

Licznik zmniejszać w delete, nie w destruktorze elementu?

A pomyśl... czy jeśli element wie ile jest innych elementów listy to ma to jakikolwiek sens?
Bardziej chyba lista powinna wiedzieć ile ma elementów.

W ogóle struktur może mieć destruktor?

Oczywiście. W C++ struktura to klasa z domyślnie publicznymi polami.

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