gpt4 book ai didi

c++ - 基类中的抽象基成员变量

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:38 24 4
gpt4 key购买 nike

我想指定一个接口(interface),它要求抽象类具有特定类型作为成员变量。

我将尝试在此处复制这种情况:

class Blob {
int data[32];
};
class Worker {
string name;
abstract void workOn(Blob&) = 0;
}

class Abstract {
vector<shared_ptr<W>> workerList;
Blob allTheStuff;
abstract void somethingElse() = 0;
void doAllTheWork() {
for (w : workerList) {
w->workOn(allTheStuff);
}
}
};

class B_Blob : public Blob {
int moreData[4096];
};

class BulbasaurTrainingCamp : public Abstract {
B_Blob allTheStuff;
void somethingElse() {} // implemented
// this class will accept Bulbasaurs into workerList
};

class Bulbasaur : Worker {
Bulbasaur(): name("Fushigidane") {}
void workOn(Blob& b) {
// bulbasaurs cover *all* their workspace with crap
for (int i=0; i<sizeof(b.data[0])/sizeof(b.data); ++i) {
b.data[i] = *((int*)&("crap"));
}
for (i=0; i<sizeof(b.moreData[0])/sizeof(b.moreData); ++i) {
b.moreData[i] = *((int*)&("crap"));
}
}

这里,抽象 bas 类有一个 Blob,但是 BulbasaurTrainingCamp 的实例有一个派生的 B_Blob。似乎因为我给了它相同的名字,所以编译器接受了它。

这个有名字吗?我想知道的是我这样做时的行为是什么。我是否用 B_Blob 覆盖了 Blob

我基本上不确定 BulbasaurTrainingCamp 内部是否存在不可访问的基础 Blob 实例。我的期望是每个 Bulbasaur 将在 B_Blob 的两个成员变量中写入 16512(而不是 16384)字节的 crap。我希望 C++ 实际上会做看起来明智的事情。这是一个例子,“它编译了,所以我认为我应该高兴,但我仍然不完全确定它正在做我认为它应该做的事情”。

最佳答案

#include<iostream>
#include<vector>
using namespace std;

int main()
{
class base
{
public:
int sameName;
base(int x):sameName(x){}
};
class derived : public base
{
public:
int diffName;
int sameName;
derived(int x,int i,int j):base(x),diffName(i),sameName(j){}

};
derived example(1,2,3);
cout<<example.sameName<<endl;
cout<<example.diffName<<endl;
cout<<example.base::sameName<<endl;
}

结果是 3 2 1。我希望这个例子能有所帮助。

关于c++ - 基类中的抽象基成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436463/

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