Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: sobol 10. 02. 2014, 17:37:01

Název: C++ a vliv viditelnosti konstruktoru při vytváření instance
Přispěvatel: sobol 10. 02. 2014, 17:37:01
Dobrý den, založil jsem téma C++ a výjimka v destruktoru ( http://forum.root.cz/index.php?topic=8389.0 (http://forum.root.cz/index.php?topic=8389.0) ), které se odvíjelo dál, ale mě odvedlo od pochopení správného zápisu programu v C++. Dovolil jsem si proto založit nové téma, kde bych chtěl pochopit, co se přesně dělo v mém kódu viz níže. Byl jsem upozorněn, že založit instanci např třídy A mám zapsat jako A a; - tedy nikoliv jako A a(); - Konstruktor A je totiž defaultně privátní, jak se to tedy ale mohlo vůbec v mém VS2013 přeložit? To překladač vygeneroval veřejný implicitní konstruktor? Něco jako přetížení? Celá věc se mi začala zdát divná, když konstruktory a destruktory nic nevypisovaly. Děkuju za jakoukoliv pomoc při pochopení mé chyby.

Kód: [Vybrat]
#include "stdafx.h"
#include <iostream>

using namespace std;

class A
{
A()
{
cout << "konstruktor";
}

~A()
{
cout << "destruktor";
}
};

class B
{
B()
{
cout << "konstruktor B";
}

~B()
{
cout << "destructor B";

throw new int(5);
}
};

int _tmain(int argc, _TCHAR* argv[])
{
int i = 1;
if (i=1)
{
A a();
B b();
}
/*
try
{

A a();
B b();
}
catch (...)
{
cout << "err";
}
*/
char ch[10];
cin >> ch;

return 0;
}
Název: Re:C++ a vliv viditelnosti konstruktoru při vytváření instance
Přispěvatel: Jakub Galgonek 10. 02. 2014, 18:02:49
Byl jsem upozorněn, že založit instanci např třídy A mám zapsat jako A a; - tedy nikoliv jako A a(); - Konstruktor A je totiž defaultně privátní, jak se to tedy ale mohlo vůbec v mém VS2013 přeložit?

Jak se to mohlo přeložit? Snadno, zápis "A a();" je jen deklarace říkající "mám funkci a(), která vrací instanci třídy A", což překladač vezme na vědomí a pokračuje dál.
Název: Re:C++ a vliv viditelnosti konstruktoru při vytváření instance
Přispěvatel: sobol 10. 02. 2014, 18:32:42
Díky.