gpt4 book ai didi

c++ - 在 C++ 中构造对象

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

所以,我来自 Java,正在学习 C++。我想实现一个可以这样调用的程序,由测试文件(boots)提供:

auto subject = anagram::anagram("diaper");
auto matches = subject.matches({"hello", "world", "zombies","pants"});
vector<string> expected;
BOOST_REQUIRE_EQUAL_COLLECTIONS(expected.begin(), expected.end(), matches.begin(), matches.end());

我没弄错吗,anagram::anagram(...) 是一个构造函数,构造一个提供方法 matches(...) 的对象?因为在我的实现中(参见下面)我收到一条错误消息(不是英语),例如“无法直接调用构造函数”。我认为对于 C++ 中的构造函数,我有一些不理解的地方。

// this is part of my implementation of anagram.h
class anagram{

public:
anagram(const string a);
vector<string> matches(vector<string> &list);

private:
string a;
bool isAnagram(string s);
};

我唯一知道的另一件事是 anagram::anagram(...) 可能是一个静态方法,返回值类似于 this,但这对我来说没有意义。所以如果有人能解释一下就好了:)

最佳答案

因为你来自 java 你习惯于看到类似这样的东西:

 someobject T = new someObject(argument);

在 C++ 中,您以不同的方式构建类:

 someObject T(argument);

你在 c++ 中创建了一个名为 T 的对象。另一种方法是创建一个指向对象的指针:

someObject *T = new someObject(argument);

这与 java 更相似,但现在您必须手动删除该指针。在堆栈而不是堆上创建对象总是更好。它避免了内存泄漏。


回答你的问题:你弄错了。您可以像我之前向您展示的那样调用构造函数。你对如何调用静态成员函数是正确的,但这不适用于 Ctor,因为它永远不可能是静态的也不是虚拟的。

关于c++ - 在 C++ 中构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027823/

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