Wykorzystanie metod pewnej klasy w innej klasie bez tworzenia obieku

0

Witam, tak jak w temacie chciałbym wykorzystać metody z jednej klasy w innej metodzie innej klasy, bez konieczności tworzenia obiektu, z jednoczesnym działaniem na tych samych danych/zmiennych.

Jakieś sugestie ?

Bardzo dziękuje za odpowiedzi.

0

nie napisałeś w jakim języku tworzysz, ale kierunek poszukiwań to: metody, zmienne, ew. klasy statyczne.

0

Sprawdź Klasa.Metoda jeśli masz np w c++ "include" biblioteke w innym wypadku PełnaŚcieżkaDoKlasy.Metoda

0
zidu89 napisał(a):

Sprawdź Klasa.Metoda jeśli masz np w c++ "include" biblioteke w innym wypadku PełnaŚcieżkaDoKlasy.Metoda

Chodzi o C++;

Mam includa tylko kompilator wywala mi 'nonstatic member reference must be relative to specific object'

przy Klasa.Metoda taka metoda sprawdza sie w Javie, tak na marginesie fajna stronka bartlomiej-wasik.pl :)

0

@haikari ale to jest przecież logiczne że nie możesz wywołać niestatycznej metody klasy bez obiektu. Jak sobie to niby wyobrażasz? Przecież taka metoda może się odnosić do pól obiektu. Do czego niby miała by się odwołać taka metoda gdyby obiektu nie było? o_O

0
Zasilany z baterii napisał(a):

nie napisałeś w jakim języku tworzysz, ale kierunek poszukiwań to: metody, zmienne, ew. klasy statyczne.

Jedna z bardziej oczywistych rzeczy, miałem nadzieję że uzyskam szybką odpowiedź ale jednak będę musiał zajrzeć do książki itp.

0

Przecież już dostałeś odpowiedź(post Shaloma)...
Skoro nie można wywołać niestatycznej metody bez obiektu klasy to metoda musi być statyczna.

BTW. zajrzenie do książki i google to pierwsze co powinieneś zrobić zanim zadałeś pytanie.

0

Może chodzi ci o bezpośrednie dziedziczenie "innej klasy" po "jednej klasie"?
Wszystkie metody dostępne, obiektu tworzyć nie musisz bo skoro jesteś w metodzie to obiekt już masz.

0

Nawiązując do tematu wkleję trochę kodu:

 
pole.h

#ifndef POLE_H
#define POLE_H

typedef char Macierz[3][3];
extern Macierz pole; // czy takie zmienne powinno sie definiowac tutaj ? chodzi mi o to zeby byla dostepna dla kazdej klasy w projekcie

class Pole{

public:
	//Macierz pole;   a może wystarczy taka definicja ?
	Pole();
	static int rysPole();
	
};

#endif


No i moje pytanie czy zmienna 'Macierz pole' muszę definiować w pliku cpp czy wystarczy np w nagłówkowym przez definicja klasy jako 'extern Macierz pole'

 
pole.cpp

#include "inc.h"



Pole::Pole(){

	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			pole[i][j]=' ';
		}
	}

}

int rysPole(){
	
	cout<<"\n\n\n\n\n\n\n";
	for(int i=0;i<3;i++){
		cout<<"                              "<<pole[i][0]<<" | "<<pole[i][1]<<" | "<<pole[i][2]<<" "<<endl;
		if(i!=2)cout<<"                             ---|---|---"<<endl;
	}
	cout<<"\n\n\n\n";


	return 1;
}

A tutaj funkcja main,

 

#include "inc.h"

int main(){

	Pole pole; 
        pole.rysPole(); //sposób oczywisty
        rysPole(); //czy mogę w ten sposób wywoływać funkcję?  
	_getch();
	return 0;

};

Np mam kilka klas w projekcie/kilka plikow i chciałbym wykorzystywać np w każdym z nich metodę z pewnej klasy ?

0

int Pole::rysPole() { ...

pole.rysPole(); //sposób oczywisty
Pole::rysPole(); //sposób drugi dostępny dla metod statycznych

0

Przy okazji, definicja zmiennej globalnej (rozumiem że 'extern')

 extern Macierz pole

wystarczy definicja w pliku nagłówkowym, czy muszę powtarzać tą definicje Macierz pole

 również  w pliku źródłowym, gdzie jest wykorzystywna? Używam MS Visual C++

Znalazłem odpowiedź na moje pytanie(możliwe że komuś się przyda):

W jednym pliku nagłówkowym wsadzasz deklarację poprzedzoną słówkiem extern. To będzie znaczyło, że w każdym pliku źródłowym, w którym będziesz includował ten nagłówek, będziesz mógł normalnie używać tych zmiennych globalnych, ale dopiero linker poda informację, gdzie one się znajdują w pamięci. A żeby się gdzieś znalazły, to musisz zdefiniować (tzn. to samo co w nagłówku, tylko bez extern) te zmienne dokładnie w jednym pliku źródłowym (np. tym z funkcją main(), jeśli są to zmienne używane rzeczywiście w całym programie).
Przypuszczam, że wcześniej definiowałeś te zmienne w każdym pliku źródłowym. Definicja może nastąpić tylko jeden raz.




**Temat do zamknięcia**

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