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