Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.703.761
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
code_name kaže...

Pozdrav ljudi!

Nov sam na forumu i zamolio bih vas za pomoc

Pokusavam shvatiti zasto mi privatne varijable u klasi ne poprimaju vrijednost koje sam im zadao preko funkcije koja je deklarirana unutar klase

Evo kod pa ako mozete pomoc uvijek mi izbacuje istu vrijednost koju dobije automatski prilikom pokretanja programa

Zahvaljujem unaprijed! :D

Okkk, a gdje ti tocno pozivas metodu upisiAB(), tj. RandAB() koja onda poziva upisiAB()?

Ja vidim da pozivas samo ispisiBroj().

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Aha

Znac i trebao sam jos pozvati i RandAB() u main-u za sto sam mislio da ce se sama izvesti {#}

Zahvaljujem na pomoci :D

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
code_name kaže...

Aha

Znac i trebao sam jos pozvati i RandAB() u main-u za sto sam mislio da ce se sama izvesti {#}

Zahvaljujem na pomoci :D

Naravno da se nece sama izvesti, kao sto se niti funkcija koju napises van klase ne izvede osim ako ju ne pozoves. Unutar klase jedina "metoda" koja se izvodi automatski (prilikom stvaranja objekta) je konstruktor. Njegova zadaca je pripremanje objekta za upotrebu.

Dakle, mogao si napraviti nesto ovako:

class Klasa
{
    // ...
public:
    Klasa(); // konstruktor
    //...
}

// konstruktor poziva RandAB();
Klasa::Klasa()
{
    RandAB();
}

 

Inace, cisto informacije radi, po nekakvoj konvenciji metode koje postavljaju podatkovne clanove na neku vrijednost (kod tebe upisiAB()) se nazivaju setterima i obicno se imenuju kao "setNesto()", npr. setAB(). Metode koje vracaju odredene (privatne) podatkovne clanove (kod tebe ispisiA() i ispisiB()) nazivaju se getteri i obicno se imenuju kao "getNesto()", npr. getA(), getB().

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put pet 2.5.2014 1:48 (1domagoj1).
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hvala na savjetima za imena funkcija i lekciji iz konstruktora sada sam ih pohvatao ucio sam ih nekidan, no nije mi padalo na pamet da ih upotrijebim za automatsko izvodenje ovdje da mi odradi cijelu operaciju umjesto funkcije da je trebam pozivati {#}

Hvala puno!

Poruka je uređivana zadnji put pet 2.5.2014 7:01 (code_name).
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
code_name kaže...

Hvala na savjetima za imena funkcija i lekciji iz konstruktora sada sam ih pohvatao ucio sam ih nekidan, no nije mi padalo na pamet da ih upotrijebim za automatsko izvodenje ovdje da mi odradi cijelu operaciju umjesto funkcije da je trebam pozivati {#}

Hvala puno!

Samo pazi prilikom poziva virtualnih funkcija unutar konstruktora, izbjegavaj jer sigurno nece raditi ono sto ocekujes. Jedino ako bas stvarno znas sto se dogada ispod haube i kako ce se stvar ponasati u sto sumnjam s obzirom da si pocetnik.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ne znam dali je ovo prava tema za ovo moje, uglavnom danas sam počeo raditi u C++u, kada idem compileat program uvijek mi izbaci error..

Pa ako mi je voljan netko pomoci?

Kod: 

#include <iostream>

#include <cstdlib>

 

using namespace std;

 

int main()

{

      cout<<"Ovo je moj prvi c++ program"<<endl;

      system("PAUSE");

      return 0;

}

Slike: 1. http://zaslike.com/files/jdx2ymq9rjij2eiwkv8a.png

2. http://zaslike.com/files/5xqlcc4tcs2df3ktmagm.png ( sto se dogodi kada stisnem ctrl i f5 )

Molim za pomoć.

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Slika 1. ne vidi se dovoljno poruke s greškom, kopiraj sve i zalijepi ovdje.

 

Nije mi jasno što je u pitanju, na prvi pogled sve je ok, čak sam si i kopirao i kompajlirao u slučaju da mi je nešto promaklo. Očigledno kompajliralo se bez greške (Code::Blocks + GCC)...

 

I da, postavio si pitanje na pravom mjestu.

To understand what recursion is, you must first understand recursion.
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Mislim da su mu ukljuceni precompiled headers. Trebao bi stavit da ih se ne koristi u Properties - C/C++ negdje.  Ili stavit #include "stdafx.h" u svoj program.

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Kolegaee kaže...

Ne znam dali je ovo prava tema za ovo moje, uglavnom danas sam počeo raditi u C++u, kada idem compileat program uvijek mi izbaci error..

Pa ako mi je voljan netko pomoci?

Kod: 

#include <iostream>

#include <cstdlib>

 

using namespace std;

 

int main()

{

      cout<<"Ovo je moj prvi c++ program"<<endl;

      system("PAUSE");

      return 0;

}

Slike: 1. http://zaslike.com/files/jdx2ymq9rjij2eiwkv8a.png

2. http://zaslike.com/files/5xqlcc4tcs2df3ktmagm.png ( sto se dogodi kada stisnem ctrl i f5 )

Molim za pomoć.

Prilikom kreiranje projekta oznaci onaj checkbox gdje pise empty project.

16 godina
offline
Programiranje u C++-u - pitanja i odgovori

Gledam malo implementaciju stoga pomoću polja i nije mi jasno što znači strelica stog->vrh.Hvala.

AC Milan - IL CLUB PIU&#39; TITOLATO AL MONDO
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

code?

16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

code?

int dodaj(int stavka, Stog *stog){

if (stog->vrh >= MAXSTOG-1) return 0;   /* dosegnut kapacitet stoga */

stog->vrh++;

stog->polje[stog->vrh] = stavka;

return 1;

}

AC Milan - IL CLUB PIU&#39; TITOLATO AL MONDO
Poruka je uređivana zadnji put sub 3.5.2014 10:34 (emerik).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Očito je u ovom slučaju 'stog' struktura/klasa tipa 'Stog'. Obično se članovima strukture/klase pristupa pomoću točke. Npr.

 

stog.vrh ...

 

ali pošto je 'stog' pokazivač onda mu se pristupa kao

 

(*stog).vrh ili stog->vrh

Poruka je uređivana zadnji put sub 3.5.2014 10:49 (TracerCPP).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Strelica je skraceno od ovog prvog oblika koji ti je TracerCPP napisao (dereferenciranje pokazivaca na strukturu, pa pristup s tockom):

(*stog).vrh

A i lakse je citati.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori


molio bih pomoc oko zadatka koji glasi :



napisati program i realizirati sklop kalkulatora koji izracunava izzraz od brojeva i operatora + - * / te ispisuje rezultat na ekranu.



npr za uneseno 7+3*5



ispisuje 7+3*5=22



ranije ste spomenuli da se izraz upise preko stringa i da se tako moze odrediti prioritet operatora. pa bih molio pomoc oko koda. u uto bih to trebao predati. fala unaprijed :)
Moj PC  
0 2 hvala 0
13 godina
offline
Programiranje u C++-u - pitanja i odgovori

Nema smisla inače ovako dostavljati kod na "lijepe oči", ali pretpostavljam da se ne misliš ovime baviti te da ti je hitno, a ja sam istu stvar morao raditi prije nekih pola godine u Javi pa evo:

 

package src;

public class CommandLineCalculator
{

    public static void main(String[] args)
    {
       String[] operands_str = args[0].split("[*+/-]+");
       Long operands[] = new Long[operands_str.length];
       for (int i = 0; i < operands.length; ++i)
          operands[i] = Long.parseLong(operands_str[i]);
       String[] operators = args[0].replaceFirst("[0-9]+", "").split("[0-9]+"); // or "[^*+/-]+"
      
       System.out.println(args[0] + "=" + CommandLineCalculator.calculate(operands, operators));
    }

    static Long calculate(Long operands[], String operators[])
    {
       Long result = null;
       // multiplication & division
       for (int i = 0; i < operators.length; ++i)
       {
          int current = i;
          while (operators[i].equals("*") || operators[i].equals("/"))
          {
             if (operators[i].equals("*"))
             {
                operands[current] *= operands[i + 1];
             }
             else if (operators[i].equals("/"))
             {
                operands[current] /= operands[i + 1];
             }
             if (++i >= operators.length)
                break;
          }
       }
       // addition & subtraction
       result = operands[0];
       for (int i = 0; i < operators.length; ++i)
       {
          if (operators[i].equals("+"))
             result += operands[i + 1];
          else if (operators[i].equals("-"))
             result -= operands[i + 1];
       }
       return result;
    }

}

 

Ne bi trebao biti veliki problem ovaj kod modificirati u C++ uspomoć Boosta (splitanje command-line argumenta). Eto, bar da se malo pomučiš.
Vjerojatno bi iskusniji posjetioci teme ovo daleko bolje riješili, ali radi!

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 3.5.2014 17:26 (pr0n_addict).
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Googlao sam, dakle ako ima netko ovakav problem, ide u Project - Properties - Configuration Properties - Linker - Enable Incremental Linking treba biti na NO. 

Zbog toga mi nije htio compile napraviti.

Imam jos jedno pitanje, mislim da je to više savjet, dakle kada da pocnem na neke ozbiljnije stvari ici ? Napravio sam par programa u konzoli, dosta toga naucio, sto dalje ?

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Kolegaee kaže...
Imam jos jedno pitanje, mislim da je to više savjet, dakle kada da pocnem na neke ozbiljnije stvari ici ?

Kada god poželiš. Učiš kroz rad, kada naletiš na nešto što ti treba, a što još ne znaš, to naučiš i ideš dalje. Bitno je znati naći po internetu nekakav suvisli tekst o onome s čime imaš problema. Ukratko, da bi učio moraš se stalno tjerati u područja o kojima nemaš pojma :P

 

Ne možeš nove stvari naučiti ako uvijek drviš po jedno te istoj stvari.

To understand what recursion is, you must first understand recursion.
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Može jedno objašnjenje... Ovako zadatak glasi... Napravi program koji unosi 2 stringa, a zatim ispisuje koliko se puta kraći string ponavlja u duljem stringu (npr. za stringove st i stostrukost ispisuje se rezultat 3, a za informatika i mate rezultat 0 .... Nikako nisam mogao da rijesim sve dok nisam napravio jos jednu pomocnu varijablu pom tipa char* i  njoj pridodao  vrijednos str1, tj. postavio pointer da pokazuje na pocetak veceg stringa, jer kad bi koristio str1 ispisao bi mi krivi broj!! Nez sto je razlog tomu, a to me muči ;) !!!

 

 

 

#include <iostream>

#include <cstdio>

using namespace::std;

 

int broj(char *str1, char *str2);

 

int main(){

char str1 [31] = "stostrukost";

char str2 [11] = "st";

     cout << broj(str1,str2);

 

}

int broj(char *str1, char *str2){

   char *pom = str1;

   int br = 0;

while(true){

if((pom = strstr(pom, str2)) != NULL){

      br++;

      pom += strlen(str2);

      }

else

     break;

   }

return br;

}

 

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
HA-HA-HA-HA kaže...

Može jedno objašnjenje... Ovako zadatak glasi... Napravi program koji unosi 2 stringa, a zatim ispisuje koliko se puta kraći string ponavlja u duljem stringu (npr. za stringove st i stostrukost ispisuje se rezultat 3, a za informatika i mate rezultat 0 .... Nikako nisam mogao da rijesim sve dok nisam napravio jos jednu pomocnu varijablu pom tipa char* i  njoj pridodao  vrijednos str1, tj. postavio pointer da pokazuje na pocetak veceg stringa, jer kad bi koristio str1 ispisao bi mi krivi broj!! Nez sto je razlog tomu, a to me muči ;) !!!

 

Meni kod ispisuje 3 i kad pomocnu varijablu zamjenim sa str1.

 

Btw probaj ovo, str1 = "ababa" str2 = "aba"

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
HA-HA-HA-HA kaže...

Može jedno objašnjenje... Ovako zadatak glasi... Napravi program koji unosi 2 stringa, a zatim ispisuje koliko se puta kraći string ponavlja u duljem stringu (npr. za stringove st i stostrukost ispisuje se rezultat 3, a za informatika i mate rezultat 0 .... Nikako nisam mogao da rijesim sve dok nisam napravio jos jednu pomocnu varijablu pom tipa char* i  njoj pridodao  vrijednos str1, tj. postavio pointer da pokazuje na pocetak veceg stringa, jer kad bi koristio str1 ispisao bi mi krivi broj!! Nez sto je razlog tomu, a to me muči ;) !!!

 

 

 

Radi i sa str1, a kod moraš malo preurediti, strlen je prevelik korak. Pomoćnu varijablu koristiš iz drugog razloga, ako želiš sačuvati originalnu varijablu.

 

#include <iostream>

#include <cstdio>

using namespace::std;



int broj(char *str1, char *str2);



int main(){

    char str1[31] = "stostrukost";

    char str2[11] = "st";

    cout << broj(str1, str2);



}

int broj(char *str1, char *str2){


    int br = 0;
    while (str1 = strstr(str1, str2))
    {
       br++;
       str1 += 1;
    }

    return br;

}

Poruka je uređivana zadnji put ned 4.5.2014 17:09 (Floki).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori
a
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Ne mogu nikako da naučim pokazivače/pointere, jednostavno su mi prekomplikovani, a opet imam želju da ih naučim iako ih smatram dosta beskorisnim.
Pomoć?
To sam ja- sigurno JA
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
wall3 kaže...
Ne mogu nikako da naučim pokazivače/pointere, jednostavno su mi prekomplikovani, a opet imam želju da ih naučim iako ih smatram dosta beskorisnim.
Pomoć?

haha :D

 

Za shvaćanje pointera imaš dobrih tutoriala na netu,ili možeš pogledati na FER-ovu stranicu,imaš svima dostupne materijale iz kolegija Programiranje i programsko inženjerstvo pa tamo pogledaj predavanje vezano uz to.

AC Milan - IL CLUB PIU&#39; TITOLATO AL MONDO
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala, čudna jd konstrukcija rečenice :D

 

Ozbiljno im ne vidim svrhu, osim možda u igrama.

To sam ja- sigurno JA
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
wall3 kaže...

Ozbiljno im ne vidim svrhu, osim možda u igrama.

Liste, grafovi/stabla, polja (stringovi, bitmape, kojekakve druge tabele), stogovi...

Sve to leži na pokazivačima.

 

Ideja pokazivača je jako jednostavna: to su varijable čiji je sadržaj memorijska adresa nekog podatka u memoriji. Memorijske adrese su pozitivne, cjelobrojne vrijednosti. Što znači da su pokazivači u biti integeri odgovarajuće širine (na 32 bitnim računalima su 32 bita, na 64 bitnim 64 bita). To također znači i da sa njima možeš vršiti računske operacije, baš kao i sa svim drugim brojevima, iako treba napomenuti da se aritmetika sa pokazivačima ponaša malo drugačije od klasične aritmetike.

 

Kada u izraz ubaciš pokazivač, to je kao da si ubacio memorijsku adresu (dakle cijeli broj) u izraz. A kada ispred imena tog pokazivača dodaš zvjezdicu, tada kažemo da si dereferencirao pokazivač, što znači da se u izrazu neće koristiti memorijska adresa nego ono što se nalazi na toj memorijskoj adresi.

 

Evo primjer:

// deklariramo cjelobrojnu varijablu 'a' i dodijelimo joj vrijendost 5
int a = 5;

// deklariramo pokazivač na cijeli broj 'b'
int *b;

// pokazivač 'b' sada sadržava adresu varijable 'a'
// (odnosno memorijsku adresu na kojoj se nalazi broj 5)
b = &a;

// ispišemo vrijednost pokazivača pri čemu se na ekranu prikaže adresa
// varijable 'a'
printf("%d\n", b);

// ispišemo dereferencirani pokazivač 'b' pri čemu se na ekran ispiše ono na
// što pokazivač 'b' pokazuje, to jest broj 5
printf("%d\n", *b);

 

Ili to možeš ovako objasniti:

printf("Na adresi %d nalazi se vrijednost %d\n", b, *b);

 

Pokazivače uopće nije teško za shvatiti kada jednom shvatiš da se radna memorija sastoji od niza bajtova od kojih svaki ima svoju jedinstvenu adresu. Bajt je najmanji komad memorije koji možeš direktno adresirati (da bi pristupio bitovima koji sačinjavaju jedan bajt, moraš koristiti bitovne operacije). Memorijske adrese počinju od nule pa sve do 232 (4 294 967 296) na 32 bitnim računalima, odnosno sve do 264 (18 446 744 073 709 551 616) na 64 bitnim računalima. Zahvaljujući konceptu virtualne memorije, adrese s kojima ćeš imati posla će u 99.999% slučajeva biti virtualne adrese, a ne fizičke adrese, i upravo zbog toga možeš imati situacije da se nešto nalazi na adresi od 2 gigabajta, iako imaš samo 512 MB radne memorije.

 

Iako su pokazivači sami po sebi jednostavan koncept, kada imaš posla sa višestrukom indirekcijom (slučajevi kada imaš pokazivač na pokazivač na pokazivač...) stvari mogu postati nezgodno zamršene.

To understand what recursion is, you must first understand recursion.
Poruka je uređivana zadnji put pon 5.5.2014 21:26 (rustweaver).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
wall3 kaže...

Ozbiljno im ne vidim svrhu, osim možda u igrama.

Memorijske adrese su pozitivne, cjelobrojne vrijednosti.

U pravilu memorijske adrese su predstavljene heksadecimalnim vrijednostima koje se sastoje od dva dijela: segment i offset. No da bi ih nama bilo lakše pojmiti možemo ih interpretirati kao cjelobrojne vrijednosti.

 

Npr. memorijska adresa 0x9FFF:000F (0x9FFF segment adresa, 000F - offset adresa). Kada se to dvoje zbroji dobije se 0x9FFFF, a to pretvoreno u dekadski sustav iznosi 655359 što bi bio integer ekvivalent adrese.

Poruka je uređivana zadnji put sri 7.5.2014 13:10 (TracerCPP).
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

Nadovezujem se na priču oko pokazivača.

 

Ova dva ranija posta puna su informacija, ali gotovo ništa od toga ne pokazuju nekome tko je početnik zašto su pokazivači dobri i gdje se koriste, pa onda i dolaze postovi tipa 'pokazivači su bezveze' itd. 

 

Na primjer, ove fore sa inkrementiranjem pokazivača i računanjem nikad nisam koristio u životu.

 

Ali nisam vidio da je itko spomenuo da se pokazivači redovito koriste kod kreiranja objekata na heapu, te da operator new vraća pokazivač na kreirani objekt. Po meni, ovo je najčešći način upotrebe pokazivača:

 

Primjer: Imamo program gdje se koriste neki veliki objekti, neka klasa koja ima dosta toga u sebi, puno podataka. Kreiranje objekata se radi pomoću operatora new, i ti objekti se nalaze na heapu: 

 

CBigObject *pMojObjekt = new CBigObject();

 

Kasnije se taj objekt koristi na način da funkcije prenose samo pokazivač na taj objekt, čime se dobiva na brzini, jer se ne radi kopija velikog objekta (ista stvar se postiže referencama na objekt, al to je druga tema).

 

Drugo - nasljedjivanje, polimorfizam, virtualne funkcije, sve se temelji na pokazivačima, i to se koristi u stalno, u bilo kojem ozbiljnijem projektu.

 

Tako da bi tu bio puno bolji neki real-life primjer, nego školski primjeri poput adresa na integer varijablu, koju onda mijenjamo preko pokazivača.

Lack of money is the root of all evil. George Bernard Shaw
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
CalvinRi kaže...
Na primjer, ove fore sa inkrementiranjem pokazivača i računanjem nikad nisam koristio u životu.

 

I to je beskorisno, bezveze itd samo zato jer to tebi nikada do sada nije trebalo?

 

CalvinRi kaže...
Ali nisam vidio da je itko spomenuo da se pokazivači redovito koriste kod kreiranja objekata na heapu, te da operator new vraća pokazivač na kreirani objekt. Po meni, ovo je najčešći način upotrebe pokazivača:

 

Primjer: Imamo program gdje se koriste neki veliki objekti, neka klasa koja ima dosta toga u sebi, puno podataka. Kreiranje objekata se radi pomoću operatora new, i ti objekti se nalaze na heapu: 

 

CBigObject *pMojObjekt = new CBigObject();

 

Kasnije se taj objekt koristi na način da funkcije prenose samo pokazivač na taj objekt, čime se dobiva na brzini, jer se ne radi kopija velikog objekta (ista stvar se postiže referencama na objekt, al to je druga tema).

1. Dinamička alokacija memorije je jedan od primjera korištenja pokazivača (zaboravio si delete). Međutim, kada se objekt prenosi funkciji preko pokazivača ne mora značiti da se dobiva pri brzini jer taj BigObject može biti tek 1 byte velik, dok pokazivač je 4 ili 8 bajtova. Ako se cilja na brzinu onda se ona postiže korištenjem referenci koje izbjegavaju kopiranje u potpunosti. Za to pokazivač nema smisla koristiti kad referenci nema ravne po tom pitanju.

 

2. Ja bih prije rekao da je najčešći primjer upotrebe pokazivača zapravo komunikacija među funkcijama a ne operator new. Funkcije u pravilu koriste lokalne varijable i da bi se one mogle koristiti u drugim funkcijama to se može riješiti pomoću pokazivača.

 

void zamjeni(int* a, int* b){
    int pom = *a;
    *a = *b;
    *b = pom;
}

ili ako se već cilja na brzinu:

 

void zamjeni(int& a, int& b){
    int pom = a;
    a = b;
    b = pom;
}

 

CalvinRi kaže...
Drugo - nasljedjivanje, polimorfizam, virtualne funkcije, sve se temelji na pokazivačima, i to se koristi u stalno, u bilo kojem ozbiljnijem projektu.

 

Tako da bi tu bio puno bolji neki real-life primjer, nego školski primjeri poput adresa na integer varijablu, koju onda mijenjamo preko pokazivača.

 

1. Nasljeđivanje nema veze s pokazivačima niti pokazivači moraju biti prisutni pri nasljeđivanju.

2. Polimorfizam je napredni koncept i nije dobar "real-life" primjer za nekoga tko je početnik niti uopće razumije pokazivače.

3. Primjer pokazivača na integer je sasvim dobar i objašnjava ono osnovno što se o pokazivačima treba znati - kako ga inicijalizirati i dereferencirati. Bez toga niti gornji primjer koji sam stavio (funkcija zamjeni) nije jasan.

Poruka je uređivana zadnji put sri 7.5.2014 15:17 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

U pravilu memorijske adrese su predstavljene heksadecimalnim vrijednostima koje se sastoje od dva dijela: segment i offset. No da bi ih nama bilo lakše pojmiti možemo ih interpretirati kao cjelobrojne vrijednosti.

 

Npr. memorijska adresa 0x9FFF:000F (0x9FFF segment adresa, 000F - offset adresa). Kada se to dvoje zbroji dobije se 0x9FFFF, a to pretvoreno u dekadski sustav iznosi 655359 što bi bio integer ekvivalent adrese.

To je samo za real mode. Protected mode koristi selektore koji su indeksi u GDT i LDT tabele, u kojima se danas koristi tek nekoliko descriptora od kojih gotovo svi imaju bazu nula i limit koji pokriva cijeli adresni prostor. Time se postiže flat memory model u kojem sa strane programera samo offset igra neku ulogu budući da se code segment, data segment i stack segment svi odnose na identičan segment memorije.

 

Long mode je još i više raskrstio sa segmentacijom pri čemu se CS, DS, SS, i ES postavljaju na defaultni descriptor sa bazom 0 i limitom od 264

 

Iako su segmenti i dalje prisutni (previše su ukorijenjeni u x86 da bi ih se samo tako izbacilo), u praksi možemo zaboraviti da uopće postoje. Sa stajališta modernog C kompajlera adresa se odnosi samo na "offset" dio adrese, budući da je "segment" dio adrese postao statičan, tj. efektivno postoji samo jedan segment.

 

CalvinRi kaže...

Ova dva ranija posta puna su informacija, ali gotovo ništa od toga ne pokazuju nekome tko je početnik zašto su pokazivači dobri i gdje se koriste

Promakao ti je prvi ulomak u mom postu. Nadalje, ja sam se više bavio samom problematikom što to pokazivač zapravo jest, nego onime za što je sve on koristan. To sam nabrojao već u prvoj rečenici...

To understand what recursion is, you must first understand recursion.
E-mail:
Lozinka:
 
vrh stranice