gpt4 book ai didi

c++ - 在 C++ 中混合接口(interface)和嵌套类

转载 作者:行者123 更新时间:2023-11-30 04:13:32 24 4
gpt4 key购买 nike

我是 C++ 的新手。今天,我在混合嵌套类和接口(interface)时遇到了一些问题。

我写了一个小的(无用的)程序,它比长句子更能有效地解释我的问题:

#include <iostream>
#include <vector>

class SomeInterface {
public:
virtual int SomeMethod() = 0;

class reference {
public:
virtual operator int() const = 0;
virtual reference& operator=(int x) = 0;
};

virtual reference operator[](unsigned int pos) = 0;
};

class A : public SomeInterface {
public:
A(unsigned int size) { vec_.resize(size, 0); }
int SomeMethod() { return 1; }

class reference : public SomeInterface::reference {
public:
reference(std::vector<int>::reference ref) : ref_(ref) { }
operator int() const { return (int) this->ref_; }
reference& operator=(int x) { this->ref_ = x; return *this; }
private:
std::vector<int>::reference ref_;
};

reference operator[](unsigned int pos) {
return reference(this->vec_[pos]);
};

private:
std::vector<int> vec_;
};

int main() {
A a(10);
a[5] = 42;
std::cerr << a[5] << std::endl;
return 0;
}

在这里,如果我删除界面中的 virtual reference operator[](unsigned int pos) = 0; 行,程序可以正常编译。但是,我希望数组下标运算符成为接口(interface)的一部分。

G++ 抛出的错误信息是invalid abstract return type for member function ‘virtual SomeInterface::reference SomeInterface::operator[](unsigned int)’

我明白为什么它会失败。但是我想不出任何方法来做这样的事情。谁能解释为什么我做错了(或想错了)?

最佳答案

您不能创建类型为 SomeInterface::reference 的对象,因为它是一个纯抽象类,编译器就是这么告诉您的。

您需要返回对此类的引用(或指针)。像这样:

virtual reference& operator[](unsigned int pos) = 0;

然后 :

  1. 在派生类中,您不应该更改纯虚方法的签名。它应该保持 virtual SomeInterface::reference& operator[](unsigned int pos)
  2. 不能返回对临时对象的引用

顺便说一句,请注意如何创建此类的对象。它们没有虚拟析构函数。

关于c++ - 在 C++ 中混合接口(interface)和嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390990/

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