划拳酒令一到十怎么喊用c++做一个猜拳游戏,用到基类和继承类

1.1 继承:在定义一个新类B时如果該类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类把B作为基类的一个派生类(子类)。

  • 派生类是通过对基类进行修改和扩充得到的在派生类中,可以扩充新的成员变量和成员函数
  • 派生类一经定义后,可以独立使用不依赖与基类
  • 派生類拥有基类的全部成员变量和成员函数不论是private还是public或是protected。
  • 在派生类的各个成员函数中不能访问基类的private成员。

其中Chuman是基类Cmen是派生类,CmenΦ有成员变量name、age和成员函数talk以及新增的成员函数saymen。

2.3 派生类对象的内存空间:派生类对象的体积等于基类对象的体积加上派生类对象自己嘚成员变量的体积在派生类对象中,包含着基类对象而且基类对象的存储位置位于派生类对象新增的成员变量之前

3.1 继承:“是”关系

  • 基类A,B是基类A的派生类
  • 逻辑上要求:“一个B对象也是一个A对象”。(例如:animal是基类dog是派生类,那么一个dog也是一个animal)

3.2 复合:“有”關系

  • 类C中“有”成员变量kk是类D的对象,则C和D是复合关系
  • 一般逻辑上要求:“D对象是C对象的固有组成部分”。(例如Battery是Phone的固有组成部分)

4.派生类覆盖基类成员

4.1 覆盖的定义:派生类可以定义一个和基类成员同名的成员这叫做覆盖。

4.2 基类和派生类有同名成员的情况:在派生類访问这类成员时缺省的情况是访问派生类的成员。如果要在派生类访问由基类定义的同名成员时要使用作用域符号::

int x;//同名成员,覆盖基类A中的x

5.1 不同类型成员的访问权限:

5.2 注:只能访问当前对象的基类的保护成员

6.派生类的构造函数与析构函数

6.1 构造函数的执行顺序:在创建派生类的对象时需要调用基类的构造函数,初始化派生类对象中从基类继承的成员在执行一个派生类的构造函数之前,总是先执行基類的构造函数

6.2 调用基类构造函数的两种方式:

    -显式方式:在派生类的构造函数中,为基类的构造函数提供参数

    -隐式方式:在派生类的構造函数中,省略基类的构造函数派生类的构造函数则自动调用基类默认的构造函数。

6.4 析构函数的执行顺序:执行完派生类的析构函數后自动调用基类的析构函数。

6.5 包含成员对象的派生类的构造函数的写法:

  • 先执行基类的构造函数用以初始化派生类对象中从基类继承的成员;再执行成员对象类的构造函数,用以初始化派生类对象中成员对象最后执行派生类自己的构造函数
    • 先执行派生类自己的析构函数,再依次执行各成员对象类的析构函数最后执行基类的析构函数。

    析构函数的调用顺序与构造函数的调用顺序相反

    7.public继承的赋值兼嫆规则(为多态奠定基础)

    7.1 派生类对象可以赋值给基类对象:b = d;

    注:如果派生方式是private或protected,则上述三条不行

    • private继承时,基类的public成员成为派生类嘚private成员基类的protected成员成为派生类的不可访问成员

    7.5 基类与派生类的强制转换:公有派生的情况下,派生类对象的指针可以直接赋值给基类指針

    • 即便基类指针指向的是一个派生类的对象,也不能通过基类指针访问基类没有而派生类中有的成员
    • 通过强制指针类型转换可以紦ptrBase转换成Derived类的指针

    8.直接基类和间接基类

    8.1 定义:类A派生类B,类B派生类C类C派生类D,那么:

    8.2 声明:在声明派生类时只需列出他的直接基类派生类沿着类的层次自动向上继承它的间接基类

    8.3 派生类的成员:

    • 所有间接基类的全部成员

今天写类继承的时候发生了一点尛错误记录下来
问题的核心是:用父类指针访问子类元素的方法,调用谁的

结果调用了父类的test方法

C++中没有自带的random函数,要实现随机数嘚生成就需要使用rand()和srand()下面这篇文章主要给大家介绍了关于C++实现产生随机数和相应的猜拳小游戏的相关资料,文中通过示例代码介绍的非瑺详细需要的朋友可以参考下

单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关最小是32767。不过rand()是一次性的因为系统默认的随機数种子为1,只要随机数种子不变其生成的随机数序列就不会改变。

其实对于rand()的范围,我们是可以进行人为设定的只需要在宏定义Φ定义一个random(int x)函数,就可以生成范围为0至x的随机数值当然,也可以定义为random(a,b) 使其生成范围为a至b的随机数值。具体定义方法在通式部分

srand()可鼡来设置rand()产生随机数时的随机数种子。通过设置不同的种子我们可以获取不同的随机数序列。可以利用srand((unsigned int)(time(NULL))的方法利用系统时钟,产生不哃的随机数种子不过要调用time() ,需要加入头文件< ctime >

值得注意的是,所有程序中“产生”的随机数其实是伪随机数本质是调用存储在计算機里的一组无序数值序列。

因此在初始化随机数种子时如果初始化相同的种子数值,得到的“随机数”会是一样的数值

 

第二次运行的結果,可以看出并不是真正意义上的随机数

但是在运行同一次程序时,可以把这些数字看成是随机数

关键是调用 time 函数初始化随机数种孓,达到种子随变此时需要调用 <ctime>头文件。

 

第二次运行结果可以看成真正意义上的随机数。

当需要(0-x)的随机数时只需要在 rand() % x 即可。

当需要(0-1)的小数随机数时只需要 ( rand() % x ) /x 即可,其中 x 与精度有关可取 x=100 小数后两位。

 

代码里x的值是考虑了不重复问题

以上就是这篇文章的全部內容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持

我要回帖

更多关于 划拳1到10标准手势 的文章

 

随机推荐