自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

转载 素数判定Miller_Rabin

素数判定Miller_Rabin  算法详解上次说好的要把素数判定和大数分解(见另一篇博文)的快速随机化算法解决了,于是乎今天就来解决,不得不说理解起来真的有困难。我只能大概的将思路理一下,若有错漏还请担待。首先相信有一些数学和编程经验的读者应该知道,最简单直观简单的素数判定方法就是试除法。对于判断数n是否是素数,我们从2开始一直到sqrt(n)。如果找到一个因子则判断

2017-12-05 14:34:30 362

原创 类模板中的友元声明

1、  在类模板中可以出现三种友元声明,每一种都声明了与一个或多个实体友元关系: (1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数。 (2) 类模板或函数模板的友元声明,授予对友元所有实例的访问权。 (3) 只授予对类模板或函数模板的特定实例的访问权的友元声明。2、  非模板类或非模板函数可以是类模板的友元。这个声明是说,FooBar 的成员和 fcn 函数可以访问 Bar

2017-03-31 19:37:13 855

原创 类模板的非类型形参

非类型模板实参必须是编译时常量表达式。

2017-03-31 19:13:36 560

原创 类模板成员函数的实例化

1、  与其他函数模板不同的是,在实例化类模板成员函数的进修,编译器不执行模板实参推断,相反,类模板成员函数的模板形参由调用该函数的对象的类型确定。例如,当调用 Queue 类型对象的 push 成员时,实例化的push 函数为 void Queue::push(constint &val)。对象的模板实参能够确定成员函数模板形参,这一事实意味着,调用类模板成员函数比调用类似函数模板更灵活。用模板

2017-03-31 19:08:59 3079

原创 类模板成员函数

2017-03-31 18:55:24 374

原创 显式指定模板实参

1、  指定返回类型的一种方式是引入第三个模板形参,它必须由调用者显式指定。这个版本增加了一个模板形参以指定返回类型。只有一个问题:没有实参的类型可用于推断 T1 的类型,相反,调用者必须在每次调用 sum 时为该形参显式提供实参。为调用提供显式模板实参与定义类模板的实例很类似,在以逗号分隔、用尖括号括住的列表中指定显式模板实参。显式模板类型的列表出现在函数名之后、实参表之前。

2017-03-31 18:32:57 869

原创 模板实参推断与函数指针

2017-03-31 18:22:33 322

原创 模板实参的转换

1、  模板是一个蓝图,它本身不是类或函数。编译器用模板产生指定的类或函数的特定类型版本。产生模板的特定类型实例的过程称为实例化,这个术语反映了创建模板类型或模板函数的新“实例”的概念。2、  使用函数模板时,编译器通常会为我们推断模板实参。3、  一般而论,不会转换实参以匹配已有的实例化,相反,会产生新的实例。除了产生新的实例化之外,编译器只会执行两种转换:(1)const 转换:接受

2017-03-31 18:18:31 406

原创 非类型模板形参

2017-03-31 18:13:09 509

原创 类型模板形参

1、  模板定义以关键字template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。2、  模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class

2017-03-31 16:24:52 3807

原创 句柄类

1、  C++ 中一个通用的技术是定义包装(cover)类或句柄类。句柄类存储和管理基类指针。指针所指对象的类型可以变化,它既可以指向基类类型对象又可以指向派生类型对象。用户通过句柄类访问继承层次的操作。因为句柄类使用指针执行操作,虚成员的行为将在运行时根据句柄实际绑定的对象的类型而变化。因此,句柄的用户可以获得动态行为但无须操心指针的管理。2、  迄今为止,我们已经使用过的使用计数式类,都使

2017-03-31 10:47:14 418

原创 纯虚函数

1、  在函数形参表后面写上 =0 以指定纯虚函数。2、  将函数定义为纯虚能够说明,该函数为后代类型提供了可以覆盖的接口,但是这个类中的版本决不会调用。重要的是,用户将不能创建抽象类型的对象。试图创建抽象基类的对象将发生编译时错误。

2017-03-30 20:50:07 301

原创 继承与作用域

1、  每个类都保持着自己的作用域,在该作用域中定义了成员的名字。在继承情况下,派生类的作用域嵌套在基类作用域中。如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义。正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好象这些成员是派生类成员一样。2、  与基类成员同名的派生类成员将屏蔽对基类成员的直接访问。3、  可以使用作用域操作符访问被屏蔽的基类成员

2017-03-30 20:40:08 903

原创 复制控制和继承

1、  如果派生类显式定义自己的复制构造函数或赋值操作符,则该定义将完全覆盖默认定义。被继承类的复制构造函数和赋值操作符负责对基类成分以及类自己的成员进行复制或赋值。  2、  如果派生类定义了自己的复制构造函数,该复制构造函数一般应显式使用基类复制构造函数初始化对象的基类部分。3、  赋值操作符必须防止自身赋值。假定左右操作数不同,则调用 Base 类的赋值操作符给基类部分赋值。该操

2017-03-30 19:33:11 323

原创 派生类构造函数

1、  构造函数和复制控制成员不能继承,每个类定义自己的构造函数和复制控制成员。像任何类一样,如果类不定义自己的默认构造函数和复制控制成员,就将使用合成版本。2、  派生类的合成默认构造函数除了初始化派生类的数据成员之外,它还初始化派生类对象的基类部分。基类部分由基类的默认构造函数初始化。3、  派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员。相反派生类构造函数通

2017-03-30 18:35:22 755

原创 转换与继承

1、我们已经看到,可以将派生类型的对象传给希望接受基类引用的函数。也许会因此认为对象进行转换,但是,事实并非如此。将对象传给希望接受引用的函数时,引用直接绑定到该对象,虽然看起来在传递对象,实际上实参是该对象的引用,对象本身未被复制,并且,转换不会在任何方面改变派生类型对象,该对象仍是派生类型对象。将派生类对象传给希望接受基类类型对象(而不是引用)的函数时,情况完全不同。在这种情况下,形参的类型是

2017-03-30 13:27:50 306

原创 友元与继承、静态成员与继承

1、友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只有基类具有特殊访问权 限,该基类的派生类不能访问授予友元关系的类。2、如果基类定义 static 成员,则整个继承层次中只有一个这样的成员。无论从基类派生出多少个派生类,每个 static 成员只有一个实例。 static 成员遵循常规访问控制:如果成员在基类中为 private,则派生类不能访问它。假

2017-03-30 12:49:40 571

原创 公用、私有和受保护继承

1、  如果成员在基类中为private, 则只有基类和基类的友元可以访问该成员。派生类不能访问基类的 private 成员,也不能使自己的用户能够访问那些成员。如果基类成员为 public 或 protected,则派生列表中使用的访问标号决定该成员在派生类中的访问级别:(1)如果是公用继承,基类成员保持自己的访问级别:基类的 public 成员为派生类的 public 成员,基类的 prote

2017-03-30 12:42:37 561

原创 继承与虚函数

1、  在基类中,public 和 private 标号具有普通含义:用户代码可以访问类的 public 成员而不能访问 private 成员,private 成员只能由基类的成员和友元访问。派生类对基类的 public 和 private 成员的访问权限与程序中任意其他部分一样:它可以访问 public 成员而不能访问 private 成员。有时作为基类的类具有一些成员,它希望允许派生类访问但仍

2017-03-29 23:05:38 477

原创 面向对象编程概述

1、面向对象编程的关键思想是多态性(polymorphism。,在 C++ 中,多态性仅用于通过继承而相关联的类型的引用或指针。 2、我们经常称因继承而相关联的类为构成了一个继承层次。其中有一个类称为根,所以其他类直接或间接继承根类。在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。

2017-03-29 20:21:46 341

原创 转换与类类型

1、  转换操作符是一种特殊的类成员函数。它必须是成员函数,不能指定返回类型,并且形参表必须为空。它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型:operator type();2、  类类型转换之后不能再跟另一个类类型转换。如果需要多个类类型转换,则代码将出错。   3、  避免二义性好的方法是避免编写互相提

2017-03-29 16:31:56 261

原创 操作符重载

1、  重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。2、  除了函数调用操作符operator() 之外,重载操作符时使用默认实参是非法的。3、  赋值操作符、取地址操作符和逗号操作符对类类型操作数有默认含义。如果没有特定重载版本,编译器就自己定义以下这些操作符。4、  赋值(=)、下标([])、调用(())和成

2017-03-29 15:40:49 311

原创 定义值型类

1、  处理指针成员的另一个完全不同的方法,是给指针成员提供值语义。具有值语义的类所定义的对象,其行为很像算术类型的对象:复制值型对象时,会得到一个不同的新副本。

2017-03-29 13:47:45 254

原创 智能指针

1、  智能指针除了增加功能外,其行为像普通指针一样。本例中让智能指针负责删除共享对象。用户将动态分配一个对象并将该对象的地址传给新的 HasPtr 类。用户仍然可以通过普通指针访问对象,但绝不能删除指针。HasPtr 类将保证在撤销指向对象的后一个 HasPtr 对象时删除对象。2、  定义智能指针的通用技术是采用一个使用计数。智能指针类将一个计数器与类指向的对象相关联。使用计数跟踪该类有多

2017-03-29 13:38:46 210

原创 析构函数

1、  撤销类对象时会自动调用析构函数。当对象的引用或指针超出作用域时,不会运行析构函数。只有删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数。2、  许多类不需要显式析构函数,尤其是具有构造函数的类不一定需要定义自己的析构函数。仅在有些工作需要析构函数完成时,才需要析构函数。析构函数通常用于释放在构造函数或在对象生命期内获取的资源。 3、  与复制构

2017-03-29 13:22:23 337

原创 复制构造函数

1、  只有单个形参,而且该形参是对本类类型对象的引用(常用 const 修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。   3、  如果我们没有定义复制构造函数,编译器就会为我们合成一个。与合成的默认构造函数不同,即使我们定义了其他构造函数,也会合成复制构造函数。合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本。

2017-03-29 12:15:30 429

原创 static成员

对于特定类类型的全体对象而言,访问一个全局对象有时是必要的。也许,在程序的任意点需要统计已创建的特定类类型对象的数量;或者,全局对象可能是指向类的错误处理例程的一个指针。然而,全局对象会破坏封装:对象需要支持特定类抽象的实现。如果对象是全局的,一般的用户代码就可以修改这个值。类可以定义类静态成员,而不是定义一个可普遍访问的全局对象。通常,非 static 数据成员存在于类类型的每个对象中。不像普通

2017-03-28 20:35:07 389

原创 友元

1、  友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字 friend 开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响。通常将友元声明成组地放在类定义的开始或结尾是个好主意。2、  更一般地讲,必须先定义包含成员函数的类,才能将成员函数设为友元。另一方面,不必预先声明类

2017-03-28 20:04:54 274

原创 隐式类型转换

1、  用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。 2、  可以通过将构造函数声明为explicit,来防止在需要隐式转换的上下文中使用构造函数:3、通常,除非有明显的理由想要定义隐式转换,否则,单形参构造函数应该为 explicit。将构造函数设置为 explicit 可以避免错误,并且当转换有用时,用户可以显式地构造对象。

2017-03-28 19:26:34 256

原创 默认构造函数

1、  只要定义一个对象时没有提供初始化式,就使用默认构造函数。为所有形参提供默认实参的构造函数也定义了默认构造函数。一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数。  只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数。 2、  合成的默认构造函数(synthesizeddefault constructor)使用与变量初始化相同的规则来初始化成员。具有类

2017-03-28 19:10:47 386

原创 构造函数初始化列表

1、  构造函数不能声明为const。2、  从概念上讲,可以认为构造函数分两个阶段执行:(1)初始化阶段;(2)普通的计算阶段。计算阶段由构造函数函数体中的所有语句组成。3、  在构造函数初始化列表中没有显式提及的每个成员,使用与初始化变量相同的规则来进行初始化。运行该类型的默认构造函数,来初始化类类型的数据成员。内置或复合类型的成员的初始值依赖于对象的作用域:在局部作用域中这些成员不被

2017-03-28 19:01:44 303

原创 类作用域中的名字查找

一、类成员声明名字的查找:1. 检查出现在名字使用之前的类成员的声明。2. 如果第 1 步查找不成功,则检查包含类定义的作用域中出现的声明以及出现在类定义之前的声明。 二、类成员定义中的名字查找1. 首先检查成员函数局部作用域中的声明。 2. 如果在成员函数中找不到该名字的声明,则检查对所有类成员的声明。 3. 如果在类中找不到该名字的声明,则检查在此成员函数定义之前的

2017-03-28 18:21:19 276

原创 可变数据成员

有时我们希望类的数据成员(甚至在const函数内)可以修改。这可以通过将它们声明为mutable来实现。  可变数据成员永远不能为const,甚至当它是const对象的成员时也如此。  class screen{ public: // privita: mutable int str; //may change in a const members};void screen

2017-03-27 15:23:23 482 1

原创 类的声明与定义

可以声明一个类而不定义它。  class screen;//声明而未定义  在声明之后、定义之前,类screen是一个不完全类型,即已知screen是一个类型,但不知道包含哪些成员。  不完全类型只能以有限的方式使用。不能用来定义该类型的对象,只能用于定义指向该类型的指针及引用,或用于声明(不能是定义)使用该类型作为形参类型或者返回类型的函数。  在创建对象之前,必须完整地定义该类

2017-03-27 15:07:34 6439

原创 数据抽象和封装

类背后蕴含的基本思想是数据抽象和封装。  数据抽象是一种依赖于接口和实现分离的编程技术。类设计者必须关心类是如何实现的,但使用该类的程序员不必了解这些细节。相反,使用一个类型的程序员仅需要了解类型的接口,他们抽象地考虑该类型做什么,而不必具体地考虑该类型如何工作。  封装是一项将低层次的元素组合起来形成新的、高层次实体的技术。函数是封装的一种形式:函数所执行的细节行为被封装在函数本身这个更

2017-03-27 14:56:49 1004

原创 类的简述

最简单地来说,类就是定义了一个新的类型和一个新的作用域。  在类的内部,声明成员函数是必需的,而定义成员函数是可选的。在类内部定义的函数默认为inline。将关键字const加在形参列表之后,就可以将成员函数声明为常量:      double price()const;  const成员不能改变其所操作对象的数据成员。const必须同时出现在声明和定义中,若只出现在其中一处会导致编译

2017-03-27 14:38:50 291

原创 SOJ 1047

1047. Super SnookerConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescriptionOn one of my many interplanetary travels I landed on a beautiful little planet called Crucible. It was

2017-03-26 21:28:30 423

原创 SOJ 1046

1046. Plane SpottingConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescriptionCraig is fond of planes. Making photographs of planes forms a major part of his daily life. Since

2017-03-26 20:55:44 307

原创 SOJ 1045

1045. Space ManagementConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescriptionThe new general manager Gill Bates has been to a seminar on time management. Ever since she has bee

2017-03-26 19:03:12 265

原创 SOJ 1043

1043. This Takes the CakeConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescriptionIn the kingdom of Polygonia the royal family consists of the king, the queen, and the 10-yea

2017-03-24 16:34:22 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除