代码可能写得不好,我想知道应该如何正确地完成它。
谢谢你的帮助
对于以下继承方案:→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();
}发布于 2020-06-02 17:58:51
您的代码无法编译,并存在大量语法错误。
b)为所有类配备一个返回类名的虚拟名称方法
这意味着配置文件可以是
virtual const char * name();或
virtual const char * name() const;或
virtual std::string name();或
virtual std::string name() const;但不是virtual void name()
(
a)定义类,假设A类是抽象类
因此,至少有一个方法必须是抽象的,通常情况下,这是名称。
用于以下继承方案的
:→B→C
可能是因为我为我做了UML,箭头的方向是错误的,但是A是抽象的,很可能是C继承了继承(实现)A的B
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 $ 现在还不清楚朋友函数要返回什么名字,我认为是真实的类名,但也可以是"A“。
注在A中,方法名可以是私有的,如果我可以这样说的话,可以证明朋友方法的存在是正确的。
https://stackoverflow.com/questions/62157717
复制相似问题