Aşağıdaki kodla ilgili bir sorunum var. Gördüğümüz gibi, A'nın yapıcısı tarafından C'nin yapıcısına atılan istisnayı halihazırda ele aldım, neden tekrar ana fonksiyonda bir istisna ile uğraşmak zorundayım?C++ kurucu başlatıcı listesi istisnalar atar
#include <iostream>
class WException : public std::exception
{
public:
WException(const char* info) : std::exception(info){}
};
class A
{
public:
A(int a) : a(a)
{
std::cout << "A's constructor run." << std::endl;
throw WException("A constructor throw exception.");
}
private:
int a;
};
class B
{
public:
B(int b) : b(b)
{
std::cout << "B's constructor body run." << std::endl;
throw WException("B constructor throw exception");
}
private:
int b;
};
class C : public A, public B
{
public:
C(int a, int b) try : A(a), B(b)
{
std::cout << "C's constructor run." << std::endl;
}
catch(const WException& e)
{
std::cerr << "In C's constructor" << e.what() << std::endl;
}
};
int main(int argc, char* argv[])
{
try
{
C c(10, 100);
}
catch(const WException& e)
{
std::cerr << "In the main: " << e.what() << std::endl;
}
return 0;
}
istisna aslında 'C' yapıcısının dışarı yaymak mu gördünüz mü? Eğer değilse, neden tekrar yakalayın? – arne
Ayrıca, 'main() 'da istisnayı yakalamanızı kim önerdi? Ona bu soruyu sorun! – Nawaz
@Nawaz, Veya onu, geez. Bu meslekte kadın olmadığı hiç merak değil: p – chris