Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
#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;
}
-
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.
-
Díky.