Obiekty w C

Odpowiedz Nowy wątek
2011-08-14 11:51
CAC
0

Witam.
Spójrzmy na to:

  GObject
   +----GInitiallyUnowned
         +----GtkObject
               +----GtkWidget
                     +----GtkContainer
                           +----GtkTreeView

http://developer.gnome.org/gtk/2.24/GtkTreeView.html

Hierarchia. Widzimy, że GtkTreeView jest również obiektem GtkWidget. Tylko mam pytanie, jak coś takiego uzyskać w C?
Z C++ nie ma problemu klasy, dziedziczenie, ale C?

Pozostało 580 znaków

2011-08-14 12:02
0

Gnome pisze się w trochę innym języku niż C - http://en.wikipedia.org/wiki/Vala_(programming_language) . W obecnej implementacji Vala jest tłumaczona do C, a potem kompilowana dopiero, więc możesz sobie np napisać coś w Vali, potem przetłumaczyć na C i zanalizować ten wygenerowany kod.

Writing GObject code in C in the first place, however, is relatively painful. The learning curve is quite steep, and programmers with experience in high-level object-oriented languages are likely to find it very tedious to work with GObject in C. For example, creating a non-trivial subclass (even just a subclass of GObject) can require writing and/or copying hundreds of lines of code.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-08-14 14:47
gf
0

Wala jest kompatybilna z c++?

To jest kod z C++:

GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);

i działa

Pozostało 580 znaków

2011-08-14 15:11
heh
0
gf napisał(a)

Wala jest kompatybilna z c++?

To jest kod z C++:

GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);

i działa

a to nie można stworzyć sobie we własnym języku operatora 'reinterpret_cast' bo zaraz będzie podejrzenie, że jest on kompatypiblny z c++ ? Składnia c# w kilku miejscach też przypomina składnie c++ to znaczy, że jest on kompatybilny z c++?

Pozostało 580 znaków

2011-08-14 15:38
0

heh:
Dokładnie. Jak ktoś chce się dowiedzieć jak to działa, to niech przejrzy wygenerowany kod C.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-14 15:38

Pozostało 580 znaków

2011-08-14 16:18
a
0

Ten kod jest z C++.
Chyba się nie rozumiemy, pytam jak to jest możliwe, że taki kod w c++ przechodzi:

#include <plik_z_c.h>
//...
 
GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);
//...

Gdyby to były klasy to nie mam prolemu, ale to jest jakoś inaczej zrobione, więc pytam jak

Pozostało 580 znaków

2011-08-14 17:06
0

To też działa, a klas nie ma:

#include <cstdio>
#include <cstdlib>
 
struct A {
    int pole;
 
    void wypisz() {
        printf("%d\n", pole + 5);
    }
};
 
struct B {
    int pole;
 
    void wypisz() {
        printf("%d\n", pole + 7);
    }
};
 
int main() {
 
    A *a = new A;
    B *b = reinterpret_cast<B*>(a);
 
    a->pole = 8;
 
    a->wypisz();
    b->wypisz();
 
    return 0;
}

"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
jak nie ma jak są - Azarien 2011-08-14 21:18
ok, są :P jak widać zapomniałem trochę różnic między C a C++. w każdym razie wskaźniki można sobie rzutować dowolnie. - Wibowit 2011-08-14 21:29

Pozostało 580 znaków

2011-08-14 18:40
Kumashiro
0
Wibowit napisał(a)

Gnome pisze się w trochę innym języku niż C - http://en.wikipedia.org/wiki/Vala_(programming_language) . W obecnej implementacji Vala jest tłumaczona do C, a potem kompilowana dopiero, więc możesz sobie np napisać coś w Vali, potem przetłumaczyć na C i zanalizować ten wygenerowany kod.

Kolega pytał o GObject/Gtk, a nie GNOME ;)

Jako odpowiedź zaproponuję to: http://tinobox.com/wordpress/tag/ooc/

Pozostało 580 znaków

2011-08-15 12:42
D
0

Dzięki Kumashiro, o to mi chodziło.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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