gpt4 book ai didi

c++ - 为什么不允许继承成员?

转载 作者:IT老高 更新时间:2023-10-28 12:32:06 25 4
gpt4 key购买 nike

我是 C++ 的初学者,我正在做一个关于抽象类和继承的练习。

这是我的抽象类:

#ifndef   SHAPE_H 
#define SHAPE_H
class Shape
{
public:
virtual void area();
virtual void perimeter();
virtual void volume();
};
#endif

这是我实现抽象类的具体类:

#include <iostream>
#include <cmath>
#include "Shape.h"
using namespace std;

class Circle : public Shape
{
public:
Circle(int);
private:
int r;
};

Circle::Circle(int rad)
{
r = rad;
}

void Circle::area()
{
cout << "Area of this cirle = " << 3.14 * pow(r, 2) << endl;
}

void Circle::perimeter()
{
cout << "Perimeter of this cirle = " << 2 * 3.14 * r << endl;
}

void Circle::volume()
{
cout << "Volume is not defined for circle." << endl;
}

我的 Circle 中的 area()perimeter()volume() 下有红线> 类,显示“错误:不允许继承的成员”。我浏览了我的类 ppt 并搜索了答案,但没有运气。任何帮助表示赞赏。

最佳答案

您必须将覆盖的函数声明为类定义的一部分

class Circle : public Shape
{
public:
Circle(int);
virtual void area(); // overrides Shape::area
void perimeter(); // overrides Shape::perimeter
virtual void volume();
private:
int r;
};

请注意,此处使用 virtual 是可选的。

作为 n.m.注意,您还应该在 Shape 中包含一个虚拟析构函数。您可能还希望将其虚函数设为纯虚函数(基于您对 Shape 是抽象的评论)

class Shape
{
public:
virtual ~Shape() {}
virtual void area() = 0;
virtual void perimeter() = 0;
virtual void volume() = 0;
};

关于c++ - 为什么不允许继承成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117591/

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