我想知道在Java中是否有相当于c ++的const.我理解final关键字,但遗憾的是我无法使用它来声明函数返回值final.相反,它始终确保功能不能被覆盖,正确吗?
基本上,我想确保给定的返回类不能被修改并且是只读的.这可能在Java中吗?
我正在尝试在我的c ++应用程序中创建一个Vector3D类.对于我的整个程序,我正在使用命名空间.在这个命名空间中,我已经为它声明了我的Vector3D类和一个重载的运算符<<
namespace space
{
class Vector3D
{
public:
float x, y, z;
Vector3D(float _x = 0, float _y = 0, float _z = 0);
Vector3D(const Vector3D & _vector);
Vector3D & operator=(const Vector3D & _vector);
Vector3D operator*(float _scalar);
Vector3D operator*(const Vector3D & _vector); //CROSS PRODUCT
float magnitude() const;
float magnitude2() const; //FOR SPEED
Vector3D normalize() const;
};
std::ostream & operator<<(std::ostream &, const Vector3D &);
}
Run Code Online (Sandbox Code Playgroud)
它编译得很好.我的问题是cout一个Vector3D,我必须手动调用
space::operator<<(cout, vector);
Run Code Online (Sandbox Code Playgroud)
这是一种痛苦.我想尝试避免"使用命名空间空间;",因为我喜欢"命名空间空间"中所有其余对象的前缀.
我的最后一个问题:有没有办法在不使用该命名空间的情况下在命名空间内调用重载的操作符函数?
谢谢您的帮助.
所以我有这些课程.有一个基类,但它有/将有很多很多衍生物,那些衍生类也可以有衍生物.我希望能够有一个将二进制数据写入文件的函数,但我不知道如何使用大量的派生类来完成这项工作.
我正在思考以下问题:
void writeData(ofstream & _fstream)
{
_fstream.write()//etc..
}
Run Code Online (Sandbox Code Playgroud)
但是,实现此方法的每个派生类都必须编写其所有父类的数据,这将复制大量代码.
如果不重写所有以前编写的writeData()
代码,最好的方法是什么?
我想使用 ncurses 编写一个简单的程序来显示一些数据。然后我希望程序以这样的方式写入标准输出,然后我可以在命令行上使用管道 (|) 将一些数据通过管道输出。
我目前的尝试不起作用。我可以使用“>”在文件中看到“GOT HERE”,但还有一大堆其他东西。程序也会立即退出。
#include <stdio.h>
#include <ncurses.h>
int main(int _argc, char ** _argv)
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
printf("GOT HERE");
endwin(); /* End curses mode */
printf("GOT HERE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是使用 > 的最终输出
^[[?1049h^[[1;29r^[(B^[[m^[[4l^[[?7h^[[H^[[2JHello World !!!^MGOT HERE^[[29;1H^[[?1049l^M^[[?1l^[>GOT HERE
Run Code Online (Sandbox Code Playgroud)
是否可以stdout
通过管道和 ncurses 同时使用?
是否可以让给定的子类在其超类中初始化静态最终字段?基本上我希望子类配置所需的类范围变量.不幸的是,abstract关键字并不完全适用于字段..
这最近一直困扰着我.假设我有一个基类Base.如果我在Base之上有多个派生类,例如DerivedA和DerivedB,那么深层副本就会变得很痛苦.
OtherClass(const OtherClass & _rhs)
{
//I have a list of Base *, now I must assign a class id to each derived class to properly create a new one.
//...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?
在我正在编写的游戏中,我希望有一个专用服务器连接到具有OpenGL渲染的客户端.除了服务器对mesa/OpenGL的不幸依赖之外,一切看起来都很棒.理想情况下,我希望能够拥有一个专用服务器而无需在十分之一上安装任何东西.
基本上,它归结为此.我的每个游戏对象都有一个精灵.为了渲染该精灵,必须通过图像数据将图像数据发送到图形卡glTexImage2D
,并且a GLuint
与纹理数据相关联.要渲染纹理,您需要纹理ID.
我通过使用两个不同的主文件将客户端与服务器分开,这两个主文件共享相同的核心游戏文件.只有客户端#include
的图形相关文件.我的整体类结构如下所示:
//Core game stuff
class Image
{
int width, height;
//Image data
}
class Sprite
{
const Image image;
}
//Graphics namespace
void renderObject()
{
//Some rendering code...
GLuint texId = loadTexture(someSprite.image);
renderTexture(texId);
unloadTexture(texId);
}
Run Code Online (Sandbox Code Playgroud)
现在,这看起来很棒,直到我们意识到每帧向图形卡发送图像数据很慢并且需要缓存.将GLuint
图像存储在图像上是有意义的,甚至可以赋予它一个getTexture()
功能.如果未设置,该函数将加载纹理并返回id.因此,图像数据将仅被发送到图形卡一次.
//Core game stuff
class Image
{
int width, height;
//Image data
GLuint textureId;
public:
~Image()
{
//...
unloadTexture(textureId);
}
GLuint getTexture()
{
if(!textureId)
return textureId = loadTexture();
else
return textureId; …
Run Code Online (Sandbox Code Playgroud) c++ ×5
final ×2
java ×2
c ×1
deep-copy ×1
dependencies ×1
field ×1
inheritance ×1
namespaces ×1
ncurses ×1
ofstream ×1
opengl ×1
ostream ×1
polymorphism ×1
stdout ×1