当前位置: 首页 > news >正文

C++_CH19_继承

C++_CH19_继承

面向对象编程是一个巨大范式,而继承则是一个基本的方面。继承允许类有一个相互关联的层次结构。即允许一些子类有一些公共的功能(基类),又有自己的部分。可以帮助我们减少代码的重复。

1、继承怎么写

在游戏当中,我们需要一个实体的类,来标记它的位置,和进行移动。

#include <iostream>
using namespace std;class Entity
{
public:float X,Y;void move(float xa,float ya){X += xa;Y += ya;}
};

在这个类的基础上,我们写玩家的类,玩家player实际上也是实体的一种,所以实体是玩家的父类,玩家是实体的子类。
那么怎么写呢?

class player : public Entity
#include <iostream>
using namespace std;class Entity
{
public:float X,Y;void move(float xa,float ya){X += xa;Y += ya;}
};class player : public Entity
{
public:char* name;int age;void Print(name,age){cout<< "玩家名: "<< name <<endl;cout<< "年龄: "<<age<<endl;} 
};

这个类表明,player类不仅有Entity类的所有东西,而且还有自己特有的,Print这个method和年龄,姓名的信息。只要是父类的public的部分,子类都相当于有。

#include <iostream>
#include <cstring> // 包含头文件以使用strlen和strcpy
using namespace std;class Entity {
public:float X, Y;void move(float xa, float ya) {X += xa;Y += ya;}
};class player : public Entity {
public:char name[100]; int age;void Print() {cout << "玩家名: " << name << endl;cout << "年龄: " << age << endl;}void Position() { cout << X << " " << Y << endl;}
};int main() {player wang; // 创建叫wang的玩家wang.X = 10.0f;wang.Y = 9.0f; // 可以访问X,Ycin >> wang.name; // 输入姓名cin >> wang.age; // 输入年龄wang.Print(); // 打印出来wang.move(2.0f, 3.0f); // 移动角色wang.Position(); // 打印角色位置cin.get(); // 等待用户输入return 0;
}

2 证明Entity和player元素互通

player这里只有一个char类型,则他的类型大小应该是400,但是如果player和Entity互通,则player应该是4+4+4+100 = 112。用sizeof(player)可以证明这一点。

#include <iostream>
#include <cstring> // 包含头文件以使用strlen和strcpy
using namespace std;class Entity {
public:float X, Y;void move(float xa, float ya) {X += xa;Y += ya;}
};class player : public Entity {
public:char name[100]; int age;void Print() {cout << "玩家名: " << name << endl;cout << "年龄: " << age << endl;}void Position() { cout << X << " " << Y << endl;}
};int main() {player wang; // 创建叫wang的玩家wang.X = 10.0f;wang.Y = 9.0f; // 可以访问X,Ycin >> wang.name; // 输入姓名cin >> wang.age; // 输入年龄wang.Print(); // 打印出来wang.move(2.0f, 3.0f); // 移动角色wang.Position(); // 打印角色位置cin.get(); // 等待用户输入std::cout<<sizeof(player);return 0;
}

output:

112

得证。


http://www.mrgr.cn/news/35520.html

相关文章:

  • Make breakpoint pending on future shared library load
  • 【初阶数据结构】排序——插入排序
  • 阴影的基本原理
  • Linux驱动开发初识
  • mysql学习教程,从入门到精通,SQL RIGHT JOIN语句(24)
  • Robot Operating System——多边形数据
  • [大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作
  • Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系?
  • 宝塔部署vue项目出现的各种问题
  • 【算法】模拟:(leetcode)6.Z 字形变换(medium)
  • 光子架与电子架 -- 主从子架
  • 小程序面板开发教程|开发照明 Matter 面板步骤(一)
  • WebGL阴影与后期处理
  • Taro多端统一开发解决方案
  • 多线程:死锁
  • 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之二:生产服务器的备份操作
  • 前端读取PDF和DOCX文件(干货分享)
  • 【C++】Eclipse技巧汇总
  • ATTCK实战系列-Vulnstack靶场内网域渗透(二)
  • [docker][软件]docker快速安装rabbitmq