C++ 定义继承方案
c++ definition inheritance scheme
代码可能写得不好,我想知道应该如何正确完成。
感谢您的帮助
对于以下继承方案: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继承了继承(实现(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 $
目前还不清楚friend函数必须返回什么名称,我认为是真正的类名,但它也可以是"A"。
另请注意,在A中,方法名称可以是私有的,以证明friend方法的存在(如果我可以说的话(。
相关文章:
- 继承函数的重载解析
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- C++ 定义继承方案
- 继承是否是将一组模型参数传递给不同类的可行解决方案
- 模板和unique_ptr继承情况下的重载解决方案
- 从Swift中的通用参数继承的替代方案
- 钻石继承方案在 G++ 中编译良好,但在 VC++/Eclipse 中产生警告/错误
- 寻找继承/多态性替代方案的任何理由
- c++模板继承方案
- 虚拟继承的其他替代方案
- c++多重继承(菱形方案)范例
- 钻石继承的解决方案,但它合适吗
- 通过QObject子类最接近多重继承的解决方案