gpt4 book ai didi

c++ - 如何在 C++ 中声明一个类

转载 作者:搜寻专家 更新时间:2023-10-31 00:26:21 27 4
gpt4 key购买 nike

我是 C++ 的新手,对声明类的语法很困惑。

根据我收集到的信息,您应该将所有声明存储在一个头文件中,我将其称为 declarations.h;

#pragma once

void incptr(int* value);
void incref(int& value);

class Player
{
public:
int x, y;
int speed;

void Move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}

void printinfo()
{
std::cout << x << y << speed << std::endl;
}
};

现在 Player 是一个我想存储在名为 functions.cpp 的 cpp 文件中的类

我想将上面的 Player 类移动到下面的文件 functions.cpp 中

#include "common.h"

void incptr(int* value)
{
(*value)++;
}

void incref(int& value)
{
value++;
}

common.h包含;

#pragma once
#include <iostream>
#include <string>
#include "declarations.h"

我认为发生的事情是,当我在头文件中编写 Player 类时,它已在该文件中声明,嗯,已经存在了。如果我将 Player 类移动到 functions.cpp 中,我需要留下声明。当涉及到类时,我不确定编译器期望什么作为声明。

我试过了;

class Player();
functions::Player();
void Player::Move(int xa, int ya);

还有一些其他变体,但这些对我来说最有意义。

抱歉,如果这有点困惑,仍在尝试掌握语言。在此先感谢您的帮助!

编辑:对不起,我错过了主要功能;

#include "common.h"



int main()
{

Player player = Player();
player.x = 5;
player.y = 6;
player.speed = 2;
player.Move(5, 5);
player.printinfo();

std::cin.get();
}

最佳答案

一个类的声明就像

class Player; // Note there are no parentheses here.

当两个类之间存在循环依赖时,最常使用这种形式。更常见的做法是在头文件中定义类,但将成员函数的定义放在 .cpp 文件中。为了您的目的,我们可以创建一个名为 player.h 的头文件:

class Player
{
public:
int x, y;
int speed;

void Move(int xa, int ya);
void printinfo();
};

请注意,此声明不包含成员函数的主体,因为它们实际上是定义。然后您可以将函数定义放在另一个文件中。将其命名为 player.cpp:

void Player::Move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}

void Player::printinfo()
{
std::cout << x << y << speed << std::endl;
}

请注意我们现在如何使用 Player:: 语法指定这些函数中的每一个都是 Player 类的成员。

现在假设您还有一个包含main() 函数的main.cpp 文件,您可以像这样编译代码:

g++ main.cpp player.cpp

对于这个简单的示例,您可以在类声明中定义您的函数。请注意,这会使函数“内联”,这是您应该阅读的另一个主题。

关于c++ - 如何在 C++ 中声明一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com