我正在尝试使用C++实现上面的系统。以前,我使用C#和OOP来编写程序,所以这将是我第一次使用C++,我知道这两种语言之间存在一些差异。 我想做的是在Logbook类的成员列表中计算选民人数。
在C#中,我会使用
foreach(Member m in _members) {
if(Member m is Voter) {
votercount++;
}
}
然而,我不确定在 C++ 中,这个实现是否正确? 在我的 Logbook.h 文件中。
class Logbook
{
private:
std::list<Member> _members;
在我的 Logbook.cpp 文件中:
int Logbook::CandidateCount() {
int membercount;
for(Member m: _members) {
if (Member* m=dynamic_cast<const Member*>(&Candidate)) membercount++;
}
return membercount;
}
它在&Candidate
处显示错误,指出标识符Candidate未定义。这是因为Logbook类无法访问Candidate类吗?
非常感谢任何回复和帮助。
std::list<Members>
只能包含Members
。您不能将任何子类型放入其中。如果尝试这样做,它只会复制那些是Member
的子类型部分,其余部分将被“切片”。 - GalikC++
中使用 多态性,你必须使用 指针 或者 引用。最好使用像std::list<std::unique_ptr<Member>>
这样的 智能指针。 - Galik