C++ 定义继承方案

c++ definition inheritance scheme

本文关键字:方案 继承 定义 C++      更新时间:2023-10-16

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

感谢您的帮助

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

a( 定义类,假设类 A 是抽象类

b( 为所有类配备一个返回类名的虚拟名称方法

c( 添加虚拟析构函数

d( 添加类 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( 为所有类配备一个返回类名的虚拟名称方法

这意味着配置文件可以是

virtual const char * name();

virtual const char * name() const;

virtual std::string name();

virtual std::string name() const;

但不是virtual void name()

a( 定义类,假设类 A 是抽象类

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

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

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

c( 添加虚拟析构函数

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

d( 添加类 A 的全局函数友元,以便它可以执行与 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函数必须返回什么名称,我认为是真正的类名,但它也可以是"A"。

另请注意,在A中,方法名称可以是私有的,以证明friend方法的存在(如果我可以说的话(。