递归Factorial.
This commit is contained in:
66
OOP/test.cpp
66
OOP/test.cpp
@@ -3,68 +3,18 @@ using std::cout;
|
||||
using std::cin;
|
||||
using std::endl;
|
||||
|
||||
class A {
|
||||
protected:
|
||||
int a;
|
||||
|
||||
public:
|
||||
A(int _a) : a(_a) {
|
||||
}
|
||||
void display() {
|
||||
std::cout << a << std::endl;
|
||||
}
|
||||
template <int x>
|
||||
struct Factorial {
|
||||
static const unsigned long long value = x * Factorial<x-1>::value;
|
||||
};
|
||||
|
||||
class B : virtual public A {
|
||||
protected:
|
||||
int b;
|
||||
|
||||
public:
|
||||
B(int _a, int _b) : A(_a+1), b(_b) {
|
||||
}
|
||||
void display() {
|
||||
A::display();
|
||||
std::cout << b << std::endl;
|
||||
}
|
||||
template <>
|
||||
struct Factorial<0> {
|
||||
static const unsigned long long value = 1;
|
||||
};
|
||||
|
||||
class C : virtual public A {
|
||||
protected:
|
||||
int c;
|
||||
|
||||
public:
|
||||
C(int _a, int _c) : A(_a + 2), c(_c) {
|
||||
}
|
||||
void display() {
|
||||
A::display();
|
||||
std::cout << c << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
// class D : public B, public C {
|
||||
// protected:
|
||||
// int d;
|
||||
|
||||
// public:
|
||||
// D(int _a, int _b, int _c, int _d) :A(_a), B(_a, _b), C(_a, _c), d(_d){};
|
||||
|
||||
// void display() {
|
||||
// A::display();
|
||||
// B::display();
|
||||
// C::display();
|
||||
// std::cout << d << std::endl;
|
||||
// }
|
||||
// };
|
||||
|
||||
int main() {
|
||||
// D objD(1, 2, 3, 4);
|
||||
// objD.display();
|
||||
// cout << "---\n" << sizeof(A) << endl << sizeof(B) << endl << sizeof(C) << endl;
|
||||
// cout << -13 % 6 << endl;
|
||||
cout << "---";
|
||||
endl(cout);
|
||||
endl(cout);
|
||||
cout << "---";
|
||||
endl(cout);
|
||||
Factorial<20> a;
|
||||
cout << a.value << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user