<?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>Блог Андрея Смирнова &#187; виртуальный</title>
	<atom:link href="http://www.smira.ru/tag/%d0%b2%d0%b8%d1%80%d1%82%d1%83%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.smira.ru</link>
	<description></description>
	<lastBuildDate>Wed, 24 Aug 2011 05:09:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>C++, просто смешно&#8230;</title>
		<link>http://www.smira.ru/2008/02/07/cpp-fun-virtual-inheritance/</link>
		<comments>http://www.smira.ru/2008/02/07/cpp-fun-virtual-inheritance/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 20:43:20 +0000</pubDate>
		<dc:creator>Андрей</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[виртуальный]]></category>
		<category><![CDATA[наследование]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://www.smira.ru/2008/02/07/cpp-fun-virtual-inheritance/</guid>
		<description><![CDATA[Что выведет данный код? #include &#60;stdio.h&#62; struct A { A(int x = 3) { printf("%d\n", x); } }; struct B: virtual public A { B() : A(4) {} }; struct C: virtual public A { C() : A(5) { } }; struct D: public B, public C { }; int main() { D d; B [...]]]></description>
			<content:encoded><![CDATA[<p>Что выведет данный код?</p>

<pre><code>#include &lt;stdio.h&gt;

struct A
{
    A(int x = 3) { printf("%d\n", x); }
};

struct B: virtual public A
{
   B() : A(4) {}
}; 


struct C: virtual public A
{
  C() : A(5) { }
}; 

struct D: public B, public C
{

};

int main()
{
    D d;
    B b;
    C c;

    return 0;
}
</code></pre>

<p>Ответ:</p>

<pre><code>3
4
5
</code></pre>

<p>Что самое смешное, можно из <code>D::D()</code> явно вызвать конструктор <code>A</code> с другим параметром. Наслаждаемся в C++ смесью виртуального наследования, раздельной компиляции и полученной кривости.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smira.ru/2008/02/07/cpp-fun-virtual-inheritance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

