Dlaczego nie mogę utworzyć obiektu, którego konstruktory są prywatne?

0
#include <iostream>

class pracownik{
	char* wsk;
	int ilosc_obiektow;
	void display();
	pracowik(std::string name)
	{	
		wsk = new char[name.length() + 1];
	}
	pracownik(const pracownik* prac)
	{
			//wsk = new char[prac->name.length() + 1];
			
	}
};

void pracownik::display()
{
	std::cout << wsk;
}


int main() {
	
	pracownik prac1("Iksinski");
	pracownik prac2(prac1);
	
	return 0;
}

Dlaczego klasa się nie chce wywołać, mówie o obiekcie prac1
i 2 pyt. jak można skopiować prac1 do prac2? takie coś nie zadziała jak w konstrrktorze kopiującym
jak przypisać obiekt do obiektu;

0

Pewnie dlatego, że wszystko w klasie jest prywatne.

PS: używasz niepoprawnych czasowników, tu nie ma żadnego "wywoływania" klas.

0
#include <iostream>

class pracownik{
	public:
		
	char* wsk;
	int ilosc_obiektow;
	void display();
	
	pracowik(std::string name)
	{	
		wsk = new char[name.length() + 1];
	}
	pracownik(const pracownik* prac)
	{
			//wsk = new char[prac->name.length() + 1];
			
	}
};

void pracownik::display()
{
	std::cout << wsk;
}


int main() {
	
	pracownik prac1("Iksinski");
	//pracownik prac2(prac1);
	pracownik prac2 = prac1;
	return 0;
}
1

I co mówi kompilator? Nie mówi czegoś w stylu "co to jest pracowik, nie miałeś na myśli pracownik?"?

0

jak w klasie dodać do klasy zmienną przechowującą ilośc elementów tej klasy?

0

Dodaj sobie statyczny licznik, w konstruktorze/destruktorze go zwiększaj/zmniejszaj.

0

dobra, dobra zrobiłem, mam tylko pytanie bo co robi takie przypisanie

pracownik prac1;
pracownik prac2 = prac1;
0

To jest inicjalizacja kopią (konstruktorem kopiującym)

0

jak się odwołać do pól prywatnych w klasie czworka_liczb,


#include <iostream>

class czworka_liczb {
    int x, y, z, j;

public:
    void dlugosc_wektora();

    czworka_liczb(int x, int y, int z, int j)
        : x(x)
        , y(y)
        , z(z)
        , j(j)
    {
    }
    czworka_liczb()
        : x(0)
        , y(0)
        , z(0)
        , j(0)
    {
    }
    void display()
    {
        std::cout << '(' << x << ',' << y << ',' << z << ')' << std::endl;
    }
};

class czterowektor : public czworka_liczb {
    int sygnatura = -1;
    void dlugosc_wektora();

public:
    void display()
    {
        std::cout << '(' << x << ',' << y << ',' << z << "yes" << ')' << std::endl;
    }
};

void czterowektor::dlugosc_wektora()
{
    int kwadrat = x * x + sygnatura * (y * y + z * z + j * j);
}

int main()
{

    czterowektor cztero;
    czworka_liczb czworka;
    czworka.display();
    cztero.display();

    return 0;
}

teraz oczywiście będzie błąd bo pola x , y ... są prywatne, ale musze je wywołać z klasy pochodnej, a te inty muszą być prywatne, nie moge zmienić na protected

0

po to są prywatne, żebyś ich nie ruszał z innej klasy. Weź może poczytaj o obiektowości (a w kontekście tego pytania o klasach zaprzyjaźnionych).

0
abrakadaber napisał(a):

po to są prywatne, żebyś ich nie ruszał z innej klasy. Weź może poczytaj o obiektowości (a w kontekście tego pytania o klasach zaprzyjaźnionych).

Tu może lepiej pasują pola protected zamiast pól prywatnych czy zaprzyjaźnionych klas...

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