如何解决我在这段代码中找不到垃圾值背后的原因
#include<iostream>
using namespace std;
class Base {
private: int b;
protected: int a;
public: int c; void setdata(); int getdata(); };
void Base ::setdata() { int a = 10; int b = 20; int c = 30; }
int Base::getdata() { return b; }
class Derived: public Base { public: void display() { setdata(); cout << a << endl << getdata() << endl << c << endl; } };
int main() { Derived xyz; xyz.display(); return 0; }
解决方法
让我们看看您的 setdata
函数:
void Base ::setdata() { int a = 10; int b = 20; int c = 30; }
在其中定义了三个新变量a
、b
和c
,它们与同名的Base
成员变量完全无关。
这意味着 Base
成员变量将未初始化并且具有不确定值。打印它们会导致未定义的行为。
您的 setdata
函数应该设置 Base
成员变量,这些成员变量已经声明和定义并且可以按原样使用:
void Base ::setdata() { a = 10; b = 20; c = 30; }
话虽如此,更好的解决方案是使用构造函数来初始化成员变量而不是单独的函数:
class Base
{
public:
Base()
: a{ 10 },b{ 20 },c{ 30 } // An initializer list,to initialize members
{
// Empty body of constructor function
}
// Rest of class,without the setdata function ...
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。