编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

不能被继承的类(模板参数友元) 代码(C++)

本文地址: http://blog.csdn.net/caroline_wendy

题目: 用C++设计一个不能被继承的类.

可以使用模板类模板参数友元, 模板类私有构造函数, 类虚继承这个模板类, 如果类被其他类继承时, 则虚继承会直接调用模板类, 无法构造.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.7.13
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>

using namespace std;

template <typename T> class MakeSealed {
	friend T;
private:
	MakeSealed() {}
	~MakeSealed() {}
};

class SealedClass : virtual public MakeSealed<SealedClass> {
public:
	SealedClass() {cout << "Constructor" << endl;}
	~SealedClass() {cout << "Destructor" << endl;}
};

/*不能被继承*/
/*class Try : public SealedClass {
public:
	Try() {}
	~Try() {}
};*/

int main(void)
{
	SealedClass s;
    return 0;
}

输出:

Constructor
Destructor

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

时间: 2024-10-12 22:40:08

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)的相关文章

编程算法 - 不能被继承的类(私有构造函数) 代码(C++)

不能被继承的类(私有构造函数) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用私有构造函数, 并提供静态成员函数, 返回和删除类的实例. 则只能在堆上创建实例, 不能在栈上创建. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostream> #include <list> us

编程算法 - 求1+2+...+n(模板类) 代码(C++)

求1+2+...+n(模板类) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\while\if\else\switch\case等关键字及条件判断语句(A?B:C). 可以使用模板类求解, 输入模板参数, 进行递归调用, 每次递归值减1, 至模板参数为1时, 显示调用结束模板类. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author

类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

 1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPushButton> #include <QLabel> template<class T> class run { public: T w; void show() { w.show(); } void settext() { w.setText("A"); }

类模板参数带默认值

类模板参数可以带默认值吗?答案当然是肯定的.看过STL源码的人就知道,STL里面大量使用了模板技术. 有兴趣的可以去看看STL的源码,从中可以学到不少知识. 今天,我就写一个带默认值的类模板,如下: #pragma once template<typename T, typename T defValue = NULL> class CType { public: CType() :m_value(defValue) { } ~CType() { } BOOL IsNull() const {

编程算法 - 萨鲁曼的军队(Saruman&#39;s Army) 代码(C)

萨鲁曼的军队(Saruman's Army) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 直线上有N个点, 每一个点, 其距离为R以内的区域里, 必须带有标记的点, 本身的距离为0. 尽可能少的添加标记点, 至少要有多少点被加上标记? 贪心算法, 从最左边的点开始, 依次查找距离为R需要添加标记的点, 直到结束. 代码: /* * main.cpp * * Created on: 2014.7.17 * Author: spike */

编程算法 - 和为s的连续正整数序列 代码(C)

和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出所有和为s的连续正数序列(至少含有两个数). 起始于1, 2, 相加, 如果相等则返回, 如果小于, 则前端递增右移, 如果大于, 则后端递增右移, 一直到后端移动到s的一半位置. 因为两个数, 小数为一半, 大数为一半加一, 则必然结束. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author:

编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)

圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 能够推导出约瑟夫环的递推公式, 使用循环进行求解,  时间复杂度O(n), 空间复杂度O(1). 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #incl

编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)

圆圈中最后剩下的数字(循环链表) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0开始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 使用循环链表, 依次遍历删除, 时间复杂度O(mn), 空间复杂度O(n). 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostr

编程算法 - n个骰子的点数(非递归) 代码(C)

n个骰子的点数(非递归) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把n个骰子仍在地上, 所有骰子朝上一面的点数之和为s. 输入n, 打印出s的所有可能的值出现的概率. 每次骰子的循环过程中, 本次等于上一次n-1, n-2, n-3, n-4, n-5, n-6的次数的总和. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #include <stdio.