递归Factorial.

This commit is contained in:
unlockable
2023-05-18 19:48:28 +08:00
parent 5a2f889bf1
commit 17ed8ba675

View File

@@ -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;
}