在C++中,假设我有一个Derived实现接口类的类BaseInterface,其中BaseInterface只有纯虚函数和虚析构函数:
class BaseInterface
{
public:
virtual void doSomething() = 0;
~BaseInterface(){}
};
class Derived : public BaseInterface
{
public:
Derived() {}
~Derived(){}
protected:
virtual void doSomething();
private:
int x;
};
Run Code Online (Sandbox Code Playgroud)
Derived类层次结构之外的类不应该Derived::doSomething()直接调用,即,只应通过BaseInterface类以多态方式访问它.为了执行这条规则,我已经取得了Derived::doSomething()保护.这很好用,但我正在寻找关于这种方法的意见/赞成.
谢谢!
肯
我正在寻找可以在 Linux 上运行的 C++ 代码质量度量工具。集成 Eclipse 会是一个好处,但不是必需的。
我找到了一个不错的工具,名为Source Monitor,但它只能在 Windows 上运行,并且源代码无法在 Linux 上重建。
C++规范是否允许非虚拟类的实例包含vtable指针的内存?我问这个,因为一位同事说他曾经使用过C++编译器,其中发生了以下情况:
class MyClass
{
public:
HeaderStruct header; //This had extra words
BodyStruct message_body;
};
Run Code Online (Sandbox Code Playgroud)
然后他将代码更改为此,删除了额外的单词:
struct MyClass
{
HeaderStruct header; //This did not have extra words
BodyStruct message_body;
};
Run Code Online (Sandbox Code Playgroud)
这些类型都不是虚拟的,也不是虚拟的.所以理论上可能这个特定的编译器为类实例分配了vptr的内存,但是没有为struct实例分配内存.所以我只想确定规范是否排除了这种编译器行为.
谢谢!
肯
我问的是关于在Linux上开发的C++项目.考虑一下:
我有两个对等目录,dir1和dir2. dir1包含classA.h和classB.h. dir2包含classC.h和classD.h. dir1/classA.h有一个#include对dir2/classC.h.dir2/classD.h有一个#include对dir1/classB.h.因此,目录dir1和目录之间存在周期性依赖关系dir2.但是,任何类之间都没有周期性依赖关系.
我理解为什么循环依赖关系在类之间是不好的.对我来说似乎很直观,目录也应该没有周期性依赖 - 但是我无法弄清楚为什么这会很糟糕.
有人有解释吗?