【问题标题】:I am getting a garbage value for variable a. I have to input 2 values and print their sum using 2 classes- base and derived我得到变量 a 的垃圾值。我必须输入 2 个值并使用 2 个类 - 基类和派生类打印它们的总和
【发布时间】:2021-02-01 18:31:39
【问题描述】:

这是一个 C++ 中的单继承程序。我必须使用 protected 关键字派生一个类。 在第一个类 A 中,我声明了 2 个函数来输入和存储整数变量 a 的值。 创建派生类后,我想打印为变量 a 和 b 输入的值,然后在屏幕上显示它们的总和。我正确地得到了 b 的值,但是我得到了 a 的垃圾值。有人可以帮助我并告诉我哪里出错了吗?

#include<iostream>
#include<conio.h>
using namespace std;

class A
{
 protected:
       int a;
 public:
    void input_val_a(int);
    int ret_a();
    
};

class B:protected A
{
 int b,c;
 public:
    void input_val_b(int);
    void get_a();         
    void sum();
    void display_value();

};

void A::input_val_a(int y)
{
 a=y;
}

int A::ret_a()
{
 return a;
}


void B::input_val_b(int x)
{
 b=x;
}

void B::sum()
{
 c=ret_a()+b;
}

void B::get_a()
{
 int a=ret_a();
}

void B::display_value()
{
 cout<<"Value of a="<<ret_a()<<endl;
 cout<<"Value of b="<<b<<endl;
 cout<<"Value of c="<<c<<endl;
}

int main()
{
 int a,b;
 B obj;
 A obj1;
 cout<<"Enter the value of a"<<endl;
 cin>>a;
 cout<<"Enter the value of b"<<endl;
 cin>>b;
 obj.input_val_b(b);
 obj1.input_val_a(a);
 obj.get_a();
 obj.sum();
 obj.display_value();

 getch();
 return 0;
}

【问题讨论】:

  • int a=ret_a(); in void B::get_a() 仅更改局部变量。换会员a应该是a=ret_a();吗?
  • 此外,您正在对obj 执行所有操作,除了在obj1 上调用的input_val_a。所以obj1.a 被设置为某个值,但obj.a 仍然未初始化。关于我的第一条评论:get_a 没有任何意义,它基本上是a = a。我不太确定你打算对所有类和函数做什么,最好花点时间回顾一下你应该做什么以及真正需要哪些函数。

标签: c++ oop inheritance


【解决方案1】:

当您创建两个对象实例时,除非它们共享相同的内存位置,否则它们都是两个独立的对象。这意味着一旦你这样做了,

B obj;
A obj1;

这两个是完全独立的对象。这意味着如果将a 的值分配给obj1obj 中的变量a 将不会改变。而且由于您没有初始化变量,因此您肯定会以垃圾结尾。

我该如何解决这个问题?
它很简单,要么您必须将ab 的值设置为objobj1,或者删除其中一个,大概是obj1(因为您只在创建后调用它一次)。

另一个有效的选项是将a 标记为静态变量。这意味着B::aA::a 指向同一个变量。从一个对象更新它,为所有其他对象更新a 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多