<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pamiętnik programisty &#187; common error</title>
	<atom:link href="http://piotr.doniec.eu/devlog/tag/common-error/feed/" rel="self" type="application/rss+xml" />
	<link>http://piotr.doniec.eu/devlog</link>
	<description></description>
	<lastBuildDate>Thu, 05 Aug 2010 20:22:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Z C++ zagadka nr 4</title>
		<link>http://piotr.doniec.eu/devlog/2010/07/z-c-zagadka-nr-4/</link>
		<comments>http://piotr.doniec.eu/devlog/2010/07/z-c-zagadka-nr-4/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 12:50:24 +0000</pubDate>
		<dc:creator>pejotr</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[common error]]></category>
		<category><![CDATA[tricky]]></category>

		<guid isPermaLink="false">http://piotr.doniec.eu/devlog/?p=532</guid>
		<description><![CDATA[Mając przedstawioną poniżej strukturę danych i kontener zawierający wskaźniki, wykonać operację/metodę methodA na rzecz obiektu obj_ posługując się iteratorem: class Foo { public: methodA() { printf(&#34;Wykonano...\n&#34;); } } struct data_t { int i_; Foo* obj_; } std::list&#60;data_t*&#62; data_; for(std::list&#60;data_t*&#62;::iterator i = data_.begin(); i != data_.end(); i++ ) { // operacje } W jaki sposób wykonać]]></description>
			<content:encoded><![CDATA[<p>Mając przedstawioną poniżej strukturę danych i kontener zawierający wskaźniki, wykonać operację/metodę methodA na rzecz obiektu obj_ posługując się iteratorem:</p>
<pre class="brush: cpp">
class Foo {
public:
  methodA() {
    printf(&quot;Wykonano...\n&quot;);
  }
}

struct data_t {
  int i_;
  Foo* obj_;
}

std::list&lt;data_t*&gt; data_;

for(std::list&lt;data_t*&gt;::iterator i  = data_.begin(); i != data_.end(); i++ ) {
   // operacje
}
</pre>
<p>W jaki sposób wykonać blok operacji ? Możliwości mamy kilka:</p>
<pre class="brush: cpp">
/* 1 */ i-&gt;obj_-&gt;methodA();
/* 2 */ *i-&gt;obj_-&gt;methodA();
/* 3 */ (*i)-&gt;obj_-&gt;methodA();
</pre>
<p>Rozwiązanie zagadki jest proste, ale wymaga znajomości priorytetów operatorów. Pierwsze wywołania jest całkowicie błędne, ponieważ lista przecowuje wskaźniki do strkutury, a nie samą strukturę. Zatem należy najpier wyłuskać strukturę znajdującą się pod wskazywanym adresem i dopiero wtedy wykonać metodę. Okazuje się że rowiązania 2 również jest nie poprawne, właśnie ze względu na priorytety operatorów. Dopiero numer 3 daje zamierzony efekt. Na szczęście błąd ujawnia się na etapie kompilacji&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://piotr.doniec.eu/devlog/2010/07/z-c-zagadka-nr-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pass-By-Value w Javie</title>
		<link>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/</link>
		<comments>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:24:23 +0000</pubDate>
		<dc:creator>pejotr</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[common error]]></category>
		<category><![CDATA[j2se]]></category>

		<guid isPermaLink="false">http://piotr.doniec.eu/devlog/?p=67</guid>
		<description><![CDATA[Mimo że Java jest uznawana za uproszczoną i okrojoną wersję C++ to są w niej kruczki których bez koniecznej wiedzy rozwiązać się nie da. Sposób przekazywania argumentów do metod jest szczególnie kłopotliwy dla początkujących w Javie. Ja mimo że sądziłem że trochę się z językiem już zaznajomiłem, brzydko mówiąc &#8222;naciąłem&#8221; się na teście sprawdzającym wiedzę]]></description>
			<content:encoded><![CDATA[<p>Mimo że Java jest uznawana za uproszczoną i okrojoną wersję C++ to są w niej kruczki których bez koniecznej wiedzy rozwiązać się nie da. Sposób przekazywania argumentów do metod jest szczególnie kłopotliwy dla początkujących w Javie. Ja mimo że sądziłem że trochę się z językiem już zaznajomiłem, brzydko mówiąc &#8222;naciąłem&#8221; się na teście sprawdzającym wiedzę z zakresu podstaw OO właśnie na pytaniu z przekazywaniem parametrów.<br />
Kod wyglądał tak:<span id="more-67"></span></p>
<pre class="brush: java">
class A {
  public int a = 1;
  public String b = &quot;a&quot;;
}

public class B {
  private static void aMethod(A a) {
    a.a = 2;
    a.b = &quot;b&quot;;
    a = new A();
  }

  public static void main(String[] args) {
    A a = new A();
    aMethod(a);
    System.out.println(a.a+&quot; &quot;+a.b);
  }
}
</pre>
<p>Pamiętałem że tylko typy wbudowane są przekazywane przez wartość a pozostałe, dziedziczące po Object, już przez referencję. Ale okazało się że się trochę pomyliłem. Java owszem przekazuje referencję do metody, ale jest to tylko kopia oryginalnej referencji ! Dlatego można zmienić zawartość pól tak przekazanego obiektu, ale próba przestawienia referencji gdzieś indziej nie powiedzie się ! Graficznie można to przedstawić tak:<img class="aligncenter size-full wp-image-69" title="pass-by-value" src="http://piotr.doniec.eu/devlog/wp-content/uploads/2009/03/pass-by-value.png" alt="pass-by-value" width="372" height="295" /><br />
Robiąc <code>a = new A();</code> w aMethod(&#8230;) przestawiamy tylko kopię referencji, a dokonane wcześniej zmiany będą widoczne w instancji &#8216;a&#8217; po opuszczeniu metody.</p>
<p>Do tego pomyłka w pytaniu czy wszystkie klasy mają klasę bazową.A no mają Object, tylko że Object juz po niczym nie dziedziczy, głupia pomyłka&#8230; Ale mimo wszystko żółty pas jest i widoczny na pierwszej stronie <a href="http://www.javablackbelt.com">www.javablackbelt.com</a> przez najbliższe 24h będę ;]</p>
]]></content:encoded>
			<wfw:commentRss>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
