gpt4 book ai didi

c++定义继承方案

转载 作者:行者123 更新时间:2023-12-01 14:52:34 25 4
gpt4 key购买 nike

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

感谢帮助

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

a) 定义类,假设类 A 是一个抽象类

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

c) 添加虚拟析构函数

d) 添加类 A 的全局函数 friend ,使其可以执行与点 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



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

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 函数必须返回什么名称不是很清楚,我猜想是真正的类名,但它也可以是“A”。

还要注意,如果我可以说,在 A 中,方法名称可以是私有(private)的,以证明 friend 方法的存在。

关于c++定义继承方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62157717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com