c++对象的放置

  (声明:本文参考了《深度探索c++对象模型》这本书,我连例子都和此书一样,如有人认为是偷的话,还请各位原谅,^_^)
   经历过从c到c++的人,一定想知道c++编译器是如何安排类的成员的.这里我
大概的作一下介绍,并有一些代码供你进行测试,希望对大家有点作用吧.
  其实这里的标题或许有点大了,简单的说,类的非static成员是按照声明的顺序
存放在内存区的,而类的static成员和一般的static变量的存储格式一样.我不从
简单的东西入手了,直接从一个相对复杂的多重继承的例子入手.看下面的代码:
class Point2d
{
public:
    int _x,_y;
    virtual f(){}//保证Point2d有个虚拟指针
};
class Point3d:public Point2d
{
public:
    int _z;
};
class Vertex
{
public:
   virtual void h(){}//保证Vertex3d的第二基础类有个vptr
    int next;
};
class Vertex3d:public Point3d,public Vertex
{
public:
    int mumble;
};
Point2d,Point3d,Vertex,Vertex3d的继承关系能看得出来吧.再看主函数
int main()
{
    Vertex3d v3d;
    Vertex*pv;
    pv=&v3d;
    int*x=&v

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,让我们来写一个简单的贪吃蛇游戏。 首先,我们需要定义一个蛇类(Snake),该类应该包含以下属性和方法: 属性: - vector<pair<int, int>> body:蛇身体的坐标,由许多二元组构成 方法: - void move(int direction):根据方向移动蛇 - bool eat(pair<int, int> food):判断蛇是否吃到了食物,如果吃到了,返回 true,否则返回 false - bool isDead():判断蛇是否死亡,如果死亡,返回 true,否则返回 false 接下来,我们需要定义一个游戏类(Game),该类应该包含以下属性和方法: 属性: - int width:游戏区域的宽度 - int height:游戏区域的高度 - pair<int, int> food:食物的坐标 - Snake snake:蛇的实例 方法: - void init():初始化游戏,包括创建蛇和放置食物 - void run():运行游戏,处理用户输入和每一帧的逻辑 - void draw():绘制游戏界面 下面是完整的代码实现: ```cpp #include <iostream> #include <vector> #include <stdlib.h> #include <conio.h> #include <Windows.h> using namespace std; class Snake { public: vector<pair<int, int>> body; Snake(int x, int y) { body.push_back(make_pair(x, y)); } void move(int direction) { int dx, dy; switch (direction) { case 0: // up dx = -1; dy = 0; break; case 1: // right dx = 0; dy = 1; break; case 2: // down dx = 1; dy = 0; break; case 3: // left dx = 0; dy = -1; break; } for (int i = body.size() - 1; i > 0; i--) { body[i].first = body[i - 1].first; body[i].second = body[i - 1].second; } body[0].first += dx; body[0].second += dy; } bool eat(pair<int, int> food) { if (body[0].first == food.first && body[0].second == food.second) { body.push_back(food); return true; } return false; } bool isDead(int width, int height) { if (body[0].first < 0 || body[0].first >= height || body[0].second < 0 || body[0].second >= width) { return true; } for (int i = 1; i < body.size(); i++) { if (body[i].first == body[0].first && body[i].second == body[0].second) { return true; } } return false; } }; class Game { public: int width, height; pair<int, int> food; Snake snake; Game(int w, int h) : width(w), height(h), snake(w / 2, h / 2) { init(); } void init() { srand((unsigned)time(NULL)); food.first = rand() % height; food.second = rand() % width; } void run() { int direction = 1; while (true) { if (_kbhit()) { int key = _getch(); if (key == 224) { key = _getch(); switch (key) { case 72: // up direction = 0; break; case 77: // right direction = 1; break; case 80: // down direction = 2; break; case 75: // left direction = 3; break; } } } snake.move(direction); if (snake.eat(food)) { food.first = rand() % height; food.second = rand() % width; } if (snake.isDead(width, height)) { break; } draw(); Sleep(100); } } void draw() { system("cls"); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (i == food.first && j == food.second) { cout << "@"; } else { bool flag = false; for (int k = 0; k < snake.body.size(); k++) { if (snake.body[k].first == i && snake.body[k].second == j) { cout << "O"; flag = true; break; } } if (!flag) { cout << " "; } } } cout << endl; } } }; int main() { Game game(20, 20); game.run(); return 0; } ``` 这个代码可能有点长,但是它很好理解。我们在游戏类中使用了 Snake 类,通过绘制和处理用户输入来控制蛇的移动和生死。你可以尝试运行这个代码,并根据自己的需要进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hucong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值