<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Tsinting的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Tsinting</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Tsinting]]></copyright><item><title><![CDATA[素数判定Miller_Rabin]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/78720106</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/78720106</guid><author>Tsinting</author><pubDate>Tue, 05 Dec 2017 14:34:30 +0800</pubDate><description><![CDATA[素数判定Miller_Rabin  算法详解


上次说好的要把素数判定和大数分解（见另一篇博文）的快速随机化算法解决了，于是乎今天就来解决，不得不说理解起来真的有困难。我只能大概的将思路理一下，若有错漏还请担待。



首先相信有一些数学和编程经验的读者应该知道，最简单直观简单的素数判定方法就是试除法。对于判断数n是否是素数，我们从2开始一直到sqrt(n)。如果找到一个因子则判断]]></description><category></category></item><item><title><![CDATA[类模板中的友元声明]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928754</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928754</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 19:37:13 +0800</pubDate><description><![CDATA[1、  在类模板中可以出现三种友元声明，每一种都声明了与一个或多个实体友元关系： (1)普通非模板类或函数的友元声明，将友元关系授予明确指定的类或函数。 (2) 类模板或函数模板的友元声明，授予对友元所有实例的访问权。 (3) 只授予对类模板或函数模板的特定实例的访问权的友元声明。
2、  非模板类或非模板函数可以是类模板的友元。这个声明是说，FooBar 的成员和 fcn 函数可以访问 Bar]]></description><category></category></item><item><title><![CDATA[类模板的非类型形参]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928531</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928531</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 19:13:36 +0800</pubDate><description><![CDATA[非类型模板实参必须是编译时常量表达式。]]></description><category></category></item><item><title><![CDATA[类模板成员函数的实例化]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928499</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928499</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 19:08:59 +0800</pubDate><description><![CDATA[1、  与其他函数模板不同的是，在实例化类模板成员函数的进修，编译器不执行模板实参推断，相反，类模板成员函数的模板形参由调用该函数的对象的类型确定。例如，当调用 Queue 类型对象的 push 成员时，实例化的push 函数为 void Queue::push(constint &val)。对象的模板实参能够确定成员函数模板形参，这一事实意味着，调用类模板成员函数比调用类似函数模板更灵活。用模板]]></description><category></category></item><item><title><![CDATA[类模板成员函数]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928411</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928411</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 18:55:24 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[显式指定模板实参]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928238</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928238</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 18:32:57 +0800</pubDate><description><![CDATA[1、  指定返回类型的一种方式是引入第三个模板形参，它必须由调用者显式指定。这个版本增加了一个模板形参以指定返回类型。只有一个问题：没有实参的类型可用于推断 T1 的类型，相反，调用者必须在每次调用 sum 时为该形参显式提供实参。为调用提供显式模板实参与定义类模板的实例很类似，在以逗号分隔、用尖括号括住的列表中指定显式模板实参。显式模板类型的列表出现在函数名之后、实参表之前。]]></description><category></category></item><item><title><![CDATA[模板实参推断与函数指针]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928164</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928164</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 18:22:33 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[模板实参的转换]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928114</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928114</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 18:18:31 +0800</pubDate><description><![CDATA[1、  模板是一个蓝图，它本身不是类或函数。编译器用模板产生指定的类或函数的特定类型版本。产生模板的特定类型实例的过程称为实例化，这个术语反映了创建模板类型或模板函数的新“实例”的概念。
2、  使用函数模板时，编译器通常会为我们推断模板实参。
3、  一般而论，不会转换实参以匹配已有的实例化，相反，会产生新的实例。除了产生新的实例化之外，编译器只会执行两种转换：(1)const 转换：接受 ]]></description><category></category></item><item><title><![CDATA[非类型模板形参]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68928087</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68928087</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 18:13:09 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[类型模板形参]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68926611</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68926611</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 16:24:52 +0800</pubDate><description><![CDATA[1、  模板定义以关键字template 开始，后接模板形参表，模板形参表是用尖括号括住的一个或多个模板形参的列表，形参之间以逗号分隔。模板形参表不能为空。
2、  模板形参可以是表示类型的类型形参，也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形参跟在关键字 class 或 typename 之后定义，例如，class T 是名为 T 的类型形参，在这里 class]]></description><category></category></item><item><title><![CDATA[句柄类]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68922627</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68922627</guid><author>Tsinting</author><pubDate>Fri, 31 Mar 2017 10:47:14 +0800</pubDate><description><![CDATA[1、  C++ 中一个通用的技术是定义包装（cover）类或句柄类。句柄类存储和管理基类指针。指针所指对象的类型可以变化，它既可以指向基类类型对象又可以指向派生类型对象。用户通过句柄类访问继承层次的操作。因为句柄类使用指针执行操作，虚成员的行为将在运行时根据句柄实际绑定的对象的类型而变化。因此，句柄的用户可以获得动态行为但无须操心指针的管理。
2、  迄今为止，我们已经使用过的使用计数式类，都使]]></description><category></category></item><item><title><![CDATA[纯虚函数]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68498401</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68498401</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 20:50:07 +0800</pubDate><description><![CDATA[1、  在函数形参表后面写上 =0 以指定纯虚函数。
2、  将函数定义为纯虚能够说明，该函数为后代类型提供了可以覆盖的接口，但是这个类中的版本决不会调用。重要的是，用户将不能创建抽象类型的对象。试图创建抽象基类的对象将发生编译时错误。]]></description><category></category></item><item><title><![CDATA[继承与作用域]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68496901</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68496901</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 20:40:08 +0800</pubDate><description><![CDATA[1、  每个类都保持着自己的作用域，在该作用域中定义了成员的名字。在继承情况下，派生类的作用域嵌套在基类作用域中。如果不能在派生类作用域中确定名字，就在外围基类作用域中查找该名字的定义。正是这种类作用域的层次嵌套使我们能够直接访问基类的成员，就好象这些成员是派生类成员一样。
2、  与基类成员同名的派生类成员将屏蔽对基类成员的直接访问。


3、  可以使用作用域操作符访问被屏蔽的基类成员]]></description><category></category></item><item><title><![CDATA[复制控制和继承]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68492098</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68492098</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 19:33:11 +0800</pubDate><description><![CDATA[1、  如果派生类显式定义自己的复制构造函数或赋值操作符，则该定义将完全覆盖默认定义。被继承类的复制构造函数和赋值操作符负责对基类成分以及类自己的成员进行复制或赋值。  

2、  如果派生类定义了自己的复制构造函数，该复制构造函数一般应显式使用基类复制构造函数初始化对象的基类部分。
3、  赋值操作符必须防止自身赋值。假定左右操作数不同，则调用 Base 类的赋值操作符给基类部分赋值。该操]]></description><category></category></item><item><title><![CDATA[派生类构造函数]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68491286</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68491286</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 18:35:22 +0800</pubDate><description><![CDATA[1、  构造函数和复制控制成员不能继承，每个类定义自己的构造函数和复制控制成员。像任何类一样，如果类不定义自己的默认构造函数和复制控制成员，就将使用合成版本。
2、  派生类的合成默认构造函数除了初始化派生类的数据成员之外，它还初始化派生类对象的基类部分。基类部分由基类的默认构造函数初始化。
3、  派生类构造函数的初始化列表只能初始化派生类的成员，不能直接初始化继承成员。相反派生类构造函数通]]></description><category></category></item><item><title><![CDATA[转换与继承]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68485864</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68485864</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 13:27:50 +0800</pubDate><description><![CDATA[1、我们已经看到，可以将派生类型的对象传给希望接受基类引用的函数。也许会因此认为对象进行转换，但是，事实并非如此。将对象传给希望接受引用的函数时，引用直接绑定到该对象，虽然看起来在传递对象，实际上实参是该对象的引用，对象本身未被复制，并且，转换不会在任何方面改变派生类型对象，该对象仍是派生类型对象。将派生类对象传给希望接受基类类型对象（而不是引用）的函数时，情况完全不同。在这种情况下，形参的类型是]]></description><category></category></item><item><title><![CDATA[友元与继承、静态成员与继承]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68485598</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68485598</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 12:49:40 +0800</pubDate><description><![CDATA[1、友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系，则只有基类具有特殊访问权 限，该基类的派生类不能访问授予友元关系的类。
2、如果基类定义 static 成员，则整个继承层次中只有一个这样的成员。无论从基类派生出多少个派生类，每个 static 成员只有一个实例。 static 成员遵循常规访问控制：如果成员在基类中为 private，则派生类不能访问它。假]]></description><category></category></item><item><title><![CDATA[公用、私有和受保护继承]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68485562</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68485562</guid><author>Tsinting</author><pubDate>Thu, 30 Mar 2017 12:42:37 +0800</pubDate><description><![CDATA[1、  如果成员在基类中为private， 则只有基类和基类的友元可以访问该成员。派生类不能访问基类的 private 成员，也不能使自己的用户能够访问那些成员。如果基类成员为 public 或 protected，则派生列表中使用的访问标号决定该成员在派生类中的访问级别：(1)如果是公用继承，基类成员保持自己的访问级别：基类的 public 成员为派生类的 public 成员，基类的 prote]]></description><category></category></item><item><title><![CDATA[继承与虚函数]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68219439</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68219439</guid><author>Tsinting</author><pubDate>Wed, 29 Mar 2017 23:05:38 +0800</pubDate><description><![CDATA[1、  在基类中，public 和 private 标号具有普通含义：用户代码可以访问类的 public 成员而不能访问 private 成员，private 成员只能由基类的成员和友元访问。派生类对基类的 public 和 private 成员的访问权限与程序中任意其他部分一样：它可以访问 public 成员而不能访问 private 成员。有时作为基类的类具有一些成员，它希望允许派生类访问但仍]]></description><category></category></item><item><title><![CDATA[面向对象编程概述]]></title><link>https://blog.youkuaiyun.com/Tsinting/article/details/68075830</link><guid>https://blog.youkuaiyun.com/Tsinting/article/details/68075830</guid><author>Tsinting</author><pubDate>Wed, 29 Mar 2017 20:21:46 +0800</pubDate><description><![CDATA[1、面向对象编程的关键思想是多态性（polymorphism。，在 C++ 中，多态性仅用于通过继承而相关联的类型的引用或指针。
 
2、我们经常称因继承而相关联的类为构成了一个继承层次。其中有一个类称为根，所以其他类直接或间接继承根类。在 C++ 中，基类必须指出希望派生类重写哪些函数，定义为 virtual 的函数是基类期待派生类重新定义的，基类希望派生类继承的函数不能定义为虚函数。
]]></description><category></category></item></channel></rss>