gpt4 book ai didi

c++ - 如何在方法中返回这个

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:25 25 4
gpt4 key购买 nike

我有一个图像类,我需要返回这个类的实例。最简单的方法是什么?我是一名 Java 程序员,“返回这个”给我一个错误。

#include <string>
#include "AEEImage.h"

using namespace std;

IImage *image;
Image *img;

Image::Image()
{
image = new IImage();
}

Image::~Image()
{
delete image;
image = NULL;
}

Image *createImage(string str)
{
return /*return instance of this class*/;
}

这里是图像的定义:

#pragma once

#include <string>
using namespace std;

class Image
{
public:
Image();
~Image();
Image createImage(string str);
Image createImage(const Image *img, int x, int y, int with, int height, int transform);
Image createImage(istream is);
};

我必须用 C++ 编写一个类,类似于 JAVA ME 中的图像类 (link):-这些相同的类名(图片)- 这些相同的方法名称、参数类型和返回类型

最佳答案

this仅在非静态成员函数中可用;它们在一个对象上被调用,并且this指向那个对象。 createImage()是一个非成员函数;它不是在对象上调用的,所以没有 this指针。

据推测,它应该创建一个图像并返回指向该图像的指针。也许你想要:

return new Image;

请记住,调用者有责任调用 delete一旦不再需要该对象 - C++ 中没有垃圾收集。你会是明智的研究RAII学习如何在 C++ 中自动管理动态对象;特别是,智能指针可以在这里发挥作用:

std::unique_ptr<Image> createImage() {
return std::unique_ptr<Image>(new Image);
}

一般来说,您应该忘记您在 Java 中学到的任何习语,因为那是一种非常不同的语言。有many good books在 C++ 上。

您还应该避免使用全局变量,尤其是对于逻辑上属于类实例的事物。它看起来很像 IImage *image;应该是 Image 的成员而不是全局变量(尽管它可能已经是;我不知道,因为您还没有发布 Image 的定义)。

更新:你现在说 createImage是一个成员,并且该类应该模拟您链接到的 Java 类。在那种情况下,它应该是 static .对于类成员,这与它在 Java 中的含义大致相同:它与类本身相关联,而不是与任何特定对象相关联。然后定义需要用 Image:: 限定名称表明它是一个成员,而不是命名空间中声明的不同函数。所以你想要这样的东西:

class Image {
public:
// some members
static Image * createImage(string); // Add "static" to match the Java class.
// Return a pointer (or a smart pointer)
};

Image * Image::createImage(string) { // Add "Image::" to indicate it's a member
return new Image;
}

// Usage example:
Image * image = Image::createImage("whatever"); // "::" rather than Java's "."

注意返回 Image而不是 Image * (或智能指针)将返回 Image拷贝对象,这(可能)不是你想要的;这是与 Java 的另一大区别,在 Java 中,类对象总是通过引用 (*) 传递。指针是 C++ 中最接近 Java 对象引用的东西。

(*) 学究们请注意:“通过引用传递”,我的意思是对象本身没有被克隆;对象引用按值传递。

关于c++ - 如何在方法中返回这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397521/

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