我有一个类Image,我需要返回这个类的实例.什么是简化方法呢?我是一个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*/;
}
Run Code Online (Sandbox Code Playgroud)
这是Image的定义:
#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);
};
Run Code Online (Sandbox Code Playgroud)
我必须在C++中编写一个类似于JAVA ME中的Image类的链接(链接): - 这个类的名称(图像) - 这些方法的名称,参数类型和返回类型
this仅适用于非静态成员函数; 它们在一个对象上被调用,并this指向该对象.createImage()是非会员的职能; 它没有在一个对象上调用,所以没有this指针.
据推测,它应该创建一个图像并返回指向它的指针.也许你想要:
return new Image;
Run Code Online (Sandbox Code Playgroud)
请记住,delete一旦不再需要它,调用者就会对该对象负责- 在C++中没有垃圾收集.你最好学习RAII来学习如何在C++中自动管理动态对象; 特别是,智能指针可以在这里做到这一点:
std::unique_ptr<Image> createImage() {
return std::unique_ptr<Image>(new Image);
}
Run Code Online (Sandbox Code Playgroud)
一般来说,你应该忘记你在Java中学到的任何习语,因为那是一种非常不同的语言.关于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 "."
Run Code Online (Sandbox Code Playgroud)
需要注意的是返回Image,而不是Image *(或智能指针)将返回一个副本中的Image对象,这是(可能)不是你想要的; 这是与Java的另一个重大区别,其中类对象总是通过引用(*)传递.指针是C++对Java的对象引用最接近的东西.
(*)对学生的注意:通过"通过引用传递",我的意思是对象本身没有被克隆; 对象引用按值传递.