????2??????????????????
????????????????????????????????????е? try ???????????????????????£????????????????????????????????
?????????????????????????????????? A(int i?? int j)?????????????????α????????? A(int i)?? A()???????? A(int i)?? A()?????????б???С?
????????????? ??exception1.cpp)
#include <iostream>
using namespace std;
class A{
public:
A();
A(int i);
A(int i?? int j);
private:
int num1;
int num2;
int average;
};
A:: A()try: A(0) {
// A()?????岻????е?
cout << "A() body"<< endl;
}
catch(...) {
cout << "A() catch"<< endl;
}
A::A(int i) try : A(i?? 0){
// A(int i)?????岻????е?
cout << "A(int i) body"<< endl;
}
catch(...) {
cout << "A(int i) catch"<< endl;
}
A::A(int i?? int j) try {
num1=i;
num2=j;
average=(num1+num2)/2;
cout << "A(int i?? int j) body"<< endl;
// ?????
throw 1;
}
catch(...) {
cout << "A(int i?? int j) catch"<< endl;
}
int main(){
try{
A a;
cout << "main body"<< endl;
}
catch(...){
cout << "main catch"<< endl;
}
return 0;
}
????????????????
????A(int i?? int j) body
????A(int i?? int j) catch
????A(int i) catch
????A() catch
????main catch
???????????????????????????????????????????????????????????????????????????????У???????? A(int i?? int j)???????? a ????????????????? A(int i)????????????????????????? a ????????????? A(int i)?????????? A()??????岻???????????У?????????????????????????μ??
????????????? ??exception2.cpp)
#include <iostream>
using namespace std;
class A{
public:
A();
A(int i);
A(int i?? int j);
~A();
private:
int num1;
int num2;
int average;
};
A::A(): A(0){
// A()?????岻????е?
cout << "A()body" << endl;
}
A::A(int i) try : A(i?? 0){
cout << "A(int i) body"<< endl;
// ??????????? a ????????
throw 1;
}
catch(...) {
cout << "A(int i) catch"<< endl;
}
A::A(int i?? int j){
num1=i;
num2=j;
average=(num1+num2)/2;
cout << "A(int i?? int j) body"<< endl;
}
A::~A(){
cout << "~A() body"<< endl;
}
int main(){
A a;
return 0;
}
????????????????
????A(int i?? int j) body
????A(int i) body
????~A() body
????A(int i) catch
????3?????????????????
??????????????????????????????????????????????????????????????????????????????????????????????
????????????? ??generic.cpp)
#include <iostream>
using namespace std;
template<typename T> class A{
public:
A(int i): A(i?? 0){}
A(double d): A(d?? 0.0){}
// ???????
A(T i?? T j) {
num1=i;
num2=j;
average=(num1+num2)/2;
cout << "average=" << average << endl;
}
private:
T num1;
T num2;
T average;
};
int main(){
A<int> a_int(1);
A<double> a_double(1.0);
}
????????????????
????average=0
????average=0.5
??????????δ????У???????????????壬????????????????????????????????????????迪???????д???????????????
???????
????????????????????????C++11??????????????????????????????????????C++11 ?????????????????????????????????????????????Ч?????????????????????????????Щ?????????????????????????á?