我得到变量 a 的垃圾值。我必须输入 2 个值并使用 2 个类 - 基类和派生类打印它们的总和
Posted
技术标签:
【中文标题】我得到变量 a 的垃圾值。我必须输入 2 个值并使用 2 个类 - 基类和派生类打印它们的总和【英文标题】: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 【发布时间】: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
。我不太确定你打算对所有类和函数做什么,最好花点时间回顾一下你应该做什么以及真正需要哪些函数。
【参考方案1】:
当您创建两个对象实例时,除非它们共享相同的内存位置,否则它们都是两个独立的对象。这意味着一旦你这样做了,
B obj;
A obj1;
这两个是完全独立的对象。这意味着如果将a
的值分配给obj1
,obj
中的变量a
将不会改变。而且由于您没有初始化变量,因此您肯定会以垃圾结尾。
我该如何解决这个问题?
它很简单,要么您必须将a
和b
的值设置为obj
和obj1
,或者删除其中一个,大概是obj1
(因为您只在创建后调用它一次)。
另一个有效的选项是将a
标记为静态变量。这意味着B::a
和A::a
指向同一个变量。从一个对象更新它,为所有其他对象更新a
的值。
【讨论】:
以上是关于我得到变量 a 的垃圾值。我必须输入 2 个值并使用 2 个类 - 基类和派生类打印它们的总和的主要内容,如果未能解决你的问题,请参考以下文章