C++, inheritance, virtual
C++, inheritance, virtual
我这里有一些问题。我正在努力使我的代码像java界面一样工作。这个类被另外两个类继承,它们造成了一些问题。我也想知道如果我这样做是正确的,改进我的代码的方法。我的小沟新手。看:
接口类:
#include <iostream>
#include <string>
class IZarzadzaniePozycjami{
public:
IZarzadzaniePozycjami(void);
~IZarzadzaniePozycjami(void);
public:
virtual void ZnajdzPozycjePoTytule();
virtual void ZnajdzPozycjePoId();
virtual void WypiszWszystkiePozycje();
};
#include "Pozycja.h"
#include "IZarzadzaniePozycjami.h"
#include <iostream>
#include <list>
从IZarzadzanie继承的目录类…类。
#include "Pozycja.h"
#include "IZarzadzaniePozycjami.h"
#include <iostream>
#include <list>
class Katalog : public IZarzadzaniePozycjami
{
private:
std::string dzialTematyczny;
public:
void ZnajdzPozycjePoTytule(std::string tytul);
void ZnajdzPozycjePoId(int id);
void WypiszWszystkiePozycje();
Katalog(void);
Katalog(std::string dzialTematyczny_);
void DodajPozycje(Pozycja);
std::list<Pozycja> lista;
friend bool operator==(const Katalog & kat, const std::string & s);
~Katalog(void);
};
inline bool operator==(std::string& s, Katalog& katalog)
{
return katalog == s;
}
,然后库类(biblioteka.h)也继承自接口
#include<iostream>
#include "IZarzadzaniePozycjami.h"
#include "Bibliotekarz.h"
#include "Pozycja.h"
#include "Katalog.h"
class Biblioteka :
public IZarzadzaniePozycjami
{
public:
Biblioteka(void);
~Biblioteka(void);
Biblioteka(std::string adres_);
void DodajBibliotekarza(Bibliotekarz);
void WypiszBibliotekarzy();
void DodajKatalog(Katalog);
void DodajPozycje(Pozycja p, std::string dzialTematyczny);
void ZnajdzPozycjePoTytule(std::string tytul);
void ZnajdzPozycjePoId(int id);
void WypiszWszystkiePozycje();
private: std::string adres;
};
这里有一些错误。抱歉发了这么长时间的邮件。不知道该剪掉什么
c:userskomputerdocumentsvisual studio 2012projectsproject1izarzadzaniepozycjami.h(3): error C2011: 'IZarzadzaniePozycjami' : 'class' type redefinition
1> c:userskomputerdocumentsvisual studio 2012projectsproject1izarzadzaniepozycjami.h(3) : see declaration of 'IZarzadzaniePozycjami'
1>c:userskomputerdocumentsvisual studio 2012projectsproject1katalog.h(7): error C2504: 'IZarzadzaniePozycjami' : base class undefined
1>c:userskomputerdocumentsvisual studio 2012projectsproject1biblioteka.h(9): error C2504: 'IZarzadzaniePozycjami' : base class undefined
1> Generating Code...
1>c:userskomputerdocumentsvisual studio 2012projectsproject1katalog.cpp(16): warning C4717: 'operator==' : recursive on all control paths, function will cause runtime stack overflow
在所有头文件中使用#pragma once
:
#pragma once
#include <iostream>
#include <string>
class IZarzadzaniePozycjami{
public:
IZarzadzaniePozycjami(void);
~IZarzadzaniePozycjami(void);
....
,并确保与IZarzadzaniePozycjami
头包含在IZarzadzaniePozycjami
使用之前的任何地方。
声明
virtual void ZnajdzPozycjePoTytule();
但是在你的类中你声明(我希望你定义)
void ZnajdzPozycjePoTytule(std::string tytul);
这是不同的方法。方法签名包括它的参数,所以你的虚拟方法仍然是未实现的。
您所称的"接口"类与Java概念不同。在java中,接口没有实现,但是您定义的类必须有定义的实现。如果将虚方法设置为纯虚方法(例如= 0),则可以避免定义虚方法,但是必须为IZarzadzaniePozycjami的所有非纯虚方法提供实现。在当前的形式中,这意味着必须定义每个方法。这就是为什么它不能编译
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 在基类中调用的 VIrtual 基函数,C++
- C++类:virtual和override,或者两者都没有
- g++ [[noreturn]] on a virtual method
- 尝试应用肖恩父母谈话"inheritance is the base class of evil"中的模式
- "virtual"对C++析构函数有何影响?
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 错误"pure virtual method called",当此方法已被覆盖时
- 为什么C++尝试/捕获没有捕获"pure virtual call"异常?
- 防止 CRTP 特征码在"pure virtual"调用中堆栈溢出
- Protobuf 生成的C++类无法针对 iOS 进行编译,并显示错误"Only virtual member functions can be marked 'final'"
- Python class inheritance to c++
- 为什么必须将"virtual"放入基类中,而不是仅在子类中使用"override"?在C++
- 使用 -march 编译会导致线程说"pure virtual method called"
- "Prototype pattern"和"Virtual constructor"是相同的模式吗?
- 为什么Virtual继承2类会增加对象大小
- 在C 11或更高版本中,是否可以通过Lambda来实现单方法纯Virtual C 接口
- "virtual base class in the case of multilevel inheritance"有意义吗
- C++, inheritance, virtual