Base class 成员没有期望值
Base class members don't have expected values
我正在学习 C++,并且是一个不错的初学者。我很难理解为什么会出现逻辑错误或运行时错误。谁能解释一下我做错了什么?
我已经知道了一个解决方案,通过删除 类 A 和 B 中的函数并在构造函数中简单地定义它,但如果这是正确的方法,为什么我不能像我一样在其他函数中初始化它做过吗?
#include <stdlib.h>
#include<iostream>
using namespace std;
class A
{
protected:
int x;
public:
void Init()
{
x = 10;
}
};
class B
{
protected:
int x;
public:
void Init()
{
x = 20;
}
};
class C: public A, public B
{
public:
void Test()
{
cout << "A's x is " << A::x;
cout << "\nB's x is " << B::x;
}
};
int main()
{
C c;
c.Test();
return 0;
}
我期待一个正常的结果,我通常会在 java 中使用 "this" 函数得到。
即
A's x is 10
B's x is 20
但我得到的是
A's x is 8
B's x is 50
A::Init()
和 B::Init()
都没有被调用。 A::x
和 B::x
是 uninitialized。
在 C++ 中,您应该提供 class 的默认构造函数。
要存储在 STL 容器中的 classes 也需要默认构造函数,例如 std::vector.
可能在 Java 中,编译器代表您执行此操作并且您的代码有效。
无论如何,在特定情况下,您应该初始化两个基 classes 调用
A::Init();
B::Init();
调用派生前 c.Test()。
class C : public A, public B
{
public:
void Test()
{
A::Init();
B::Init();
cout << "A's x is " << A::x;
cout << "\nB's x is " << B::x;
}
};
//output
A's x is 10
B's x is 20
此致
我正在学习 C++,并且是一个不错的初学者。我很难理解为什么会出现逻辑错误或运行时错误。谁能解释一下我做错了什么?
我已经知道了一个解决方案,通过删除 类 A 和 B 中的函数并在构造函数中简单地定义它,但如果这是正确的方法,为什么我不能像我一样在其他函数中初始化它做过吗?
#include <stdlib.h>
#include<iostream>
using namespace std;
class A
{
protected:
int x;
public:
void Init()
{
x = 10;
}
};
class B
{
protected:
int x;
public:
void Init()
{
x = 20;
}
};
class C: public A, public B
{
public:
void Test()
{
cout << "A's x is " << A::x;
cout << "\nB's x is " << B::x;
}
};
int main()
{
C c;
c.Test();
return 0;
}
我期待一个正常的结果,我通常会在 java 中使用 "this" 函数得到。
即
A's x is 10
B's x is 20
但我得到的是
A's x is 8
B's x is 50
A::Init()
和 B::Init()
都没有被调用。 A::x
和 B::x
是 uninitialized。
在 C++ 中,您应该提供 class 的默认构造函数。 要存储在 STL 容器中的 classes 也需要默认构造函数,例如 std::vector.
可能在 Java 中,编译器代表您执行此操作并且您的代码有效。
无论如何,在特定情况下,您应该初始化两个基 classes 调用
A::Init();
B::Init();
调用派生前 c.Test()。
class C : public A, public B
{
public:
void Test()
{
A::Init();
B::Init();
cout << "A's x is " << A::x;
cout << "\nB's x is " << B::x;
}
};
//output
A's x is 10
B's x is 20
此致