C++ 定义继承方案

c++ definition inheritance scheme

代码可能写得不好,我想知道应该如何正确完成。

感谢帮助

对于如下继承方案:A→B→C

a) 定义 classes 假设 class A 是一个抽象 class

b) 为所有 classes 配备一个虚拟名称方法,返回 class 名称

c) 添加虚拟析构函数

d) 添加一个全局函数 friend class A 以便它可以执行与点 b

中相同的功能
#include <iostream>


using namespace std;


class A {

    public:

    A();
    virtual void name();
    {

        return A;


    }
    friend void ffriend()
    virtual ~A();

};

class B : public A{

    public:

    B();
    virtual void name();
    {

        return B;


    }

    virtual ~B();

};

class C : public B{

    public:

    C();
    virtual void name();
    {

        return C;


    }

    virtual ~C()

};





    friend void ffriend(&A){

        name.A();

    }

您的代码无法编译并且有很多语法错误

b) equip all classes with a virtual name method returning the class name

这意味着配置文件可以

virtual const char * name();

virtual const char * name() const;

virtual std::string name();

virtual std::string name() const;

但不是 virtual void name()

a) define classes assuming that class A is to be an abstract class

所以至少有一个方法必须是抽象的,在你的情况下通常是 name

For the following inheritance scheme: A→B→C

可能是因为我为我做 UML,所以箭头方向错误,但是 A 很可能是抽象的 C 继承了 B 继承(实现)A

c) add virtual destructors

这是微不足道的,但不要忘记实现它们,而不仅仅是声明它们

d) add a global function friend of class A so that it can perform the same function as in point b

这通常意味着函数获得对 A 的引用,请注意在您的情况下声明和定义不对应,并且参数列表 (&A) 是无效

一个例子可以是:

#include <iostream>

class A {
  public:
    // default contructor is enough
    virtual ~A() {} // c)

    virtual const char * name() const = 0; // a) and b)

    friend const char * ffriend(const A &); // d)
};

const char * ffriend(const A & a)
{
  return a.name(); // or return "A" ?
}


class B : public A {
  public:
    // default contructor is enough
    virtual ~B() {} // c)

    virtual const char * name() const { return "B"; } // b)

};

class C : public B {
  public:
    // default contructor is enough
    virtual ~C() {}

    virtual const char * name() const { return "C"; } // b)
};


int main()
{
  B b;
  C c;

  std::cout << b.name() << ' ' << c.name() << ' ' << ffriend(b) << std::endl;
}

编译与执行:

pi@raspberrypi:/tmp $ g++ -Wall c.cc
pi@raspberrypi:/tmp $ ./a.out
B C B
pi@raspberrypi:/tmp $ 

不是很清楚 friend 函数必须 return 的名称,我认为是真正的 class 名称,但它可以是 "A" 要么。

还要注意 A 方法 name 可以是 private 以证明存在friend 方法,如果我能说的话。