继承的方法不会更改变量值
Inherited method doesn`t change variables values
继承的方法init((在新类中不起作用。A、B、C、D 值保持不变,因此覆盖的 square(( 方法也不起作用。
尝试将 A、B、C、D 移动到公共环境中,因为在互联网上的大多数例子中都有变量。
四边形的方法按预期工作。但是"类四边形由 IDE 下划线:"此声明没有存储类或类型说明符"。虽然程序不会崩溃。
另外,我是否以正确的方式覆盖了square((?
#include "pch.h"
#include <iostream>
using namespace std;
struct point {
float x, y;
};
class Quadrangle
{
public:
void init() // sets coordinates for A, B, C, D
{
cout << "Input A coordinates (x, y): ";
cin >> A.x >> A.y;
cout << "Input B coordinates (x, y): ";
cin >> B.x >> B.y;
cout << "Input C coordinates (x, y): ";
cin >> C.x >> C.y;
cout << "Input D coordinates (x, y): ";
cin >> D.x >> D.y;
};
void square()
{
// square calculation
};
private:
point A, B, C, D;
};
class Rectangle : public Quadrangle
{
public:
void square()
{
// square calculation
};
private:
point A, B, C, D;
};
英语不是我的第一个,我没有谈论编程的经验。抱歉,如果出现问题。
问题是Rectangle
定义了每个成员变量的另一个副本:
class Quadrangle
{
...
point A, B, C, D;
};
class Rectangle : public Quadrangle
{
...
point A, B, C, D;
};
当然,Quadrangle
访问的方法Quadrangle::A
、Quadrangle::B
等,而Rectangle
访问的方法则Rectangle::A
、Rectangle::B
等,是一组完全独立的变量。
相反,您应该只在Quadrangle
中定义变量并将它们标记为protected
(以便Rectangle
可以访问它们(:
class Quadrangle
{
...
protected:
point A, B, C, D;
};
class Rectangle : public Quadrangle
{
...
// no variables
};
<</div>
div class="answers"> 首先,如果要访问后代中的类成员,则需要使用protected
关键字,而不是private
。
其次,您不需要在后代中声明相同的变量。
在本例中,您声明了 2 组同名变量,这些变量只能从相应的类访问。
您的基类Quadrangle
没有要重写的方法,因为它们都没有用"virtual"关键字标记。您现在拥有的称为重载,只有在编译时已知 Quadrangle 类型时才有效。
请记住:作为一个好的经验法则,如果一个类有任何虚拟方法,请确保析构函数也是虚拟的:
virtual ~Quadrangle() = default;
virtual void init();
virtual void square();
<</div>
div class="answers"> 要解决问题的第二部分:要在多态性意义上进行覆盖,您需要将两个平方函数声明为虚拟函数。
相关文章:
- 使用变量值作为 PlaySound 中的路径
- 通过指针偏移量访问结构变量值
- 变量值在 C++ 中的 glutIdleFunc() 中未递增
- 更新 #ifdef 中的现有变量值?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 通过 Rcpp 和 bit64 R 包将最大的int64_t变量值从 C++ 传递到 R
- 如何使用 IRBuilder 更新 LLVM IR 中的全局变量值?
- 更改已在运行的程序的变量值
- 在 Xcode 中使用后对外部变量值进行初始化
- C++整数变量值
- 变量值,在三元运算符之后
- 如何获得对不同类的引用,以便从所述类内部获得变量值
- Java应用程序的JNI-c++变量值
- 如何固定从传感器获得的变量值
- 离开方法时重置变量值
- 打印具有通用特定变量值的类对象
- 在宏函数C++中设置宏变量值
- 为什么每次迭代都会获得相同的变量值? C++
- 如何根据基类对象中的变量值分配派生类中的变量?
- c++变量值不改变