/*******************************************************************
Copyright(c) 2016, Tyrone Li
All rights reserved.
*******************************************************************/
// 作者:TyroneLi
//
/*
Q1:
实现c++不能被继承的一个类:
实现一个c++类,该类不能被继承。
S1:
1: 由于继承父类的子类会自动继承父类的构造函数和析构函数,如果
把父类的构造函数和析构函数定义为私有成员,那么将会导致子类
试图继承该类失败;
2:定义一种虚拟继承,使用友元特性。
*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
/* 方法1 */
class Base
{
static Base*newBase()
{
return (new Base);
}
static void deleteBase(Base*instance)
{
delete instance;
}
private:
Base(){}
~Base(){}
};
// class S1 : public Base
// {
// public:
// S1(){}
// ~S1(){}
// };
/* 方法2 */
template<typename T>
class Base2
{
// 声明T类型为该类型的友元成员
friend T;
private:
Base2(){}
~Base2(){}
};
class S2 : virtual public Base2<S2>
{
public:
S2(){}
~S2(){}
};
// class S3 : public S2
// {
// public:
// S3(){}
// ~S3(){}
// };
void test_1()
{
Base base1 = Base::newBase();
Base::deleteBase(&base1);
// // cannot work.
// S1 s1 = S1();
S2 s2 = S2();
// S3 s3 = S3();
}
void test()
{
test_1();
}
int main(int argc, char**argv)
{
test();
return 0;
}