我正在尝试通过 B类打印 A类用户定义功能。 A类和 B类是继承的,但我仍无法打印 “name” 和 通过 B类功能主中的某个人的“ID” 。 当我在主要中调用 show()功能时,它会直接打印名称和 ID 但是当我打电话给 B类功能名称和 ID 完全空白。
#include<iostream>
#include<string>
using namespace std;
class A
{
protected:
string name;
string ID;
public:
void set()
{
cout << "Enter your name: ";
cin >> name;
cout << "Enter Your ID: ";
cin >> ID;
}
void show()
{
cout << "Name: " <<name << endl;
cout << "ID : " << ID << endl;
}
};
class B: public A
{
public:
void Bshow()
{
cout << "THe name of person and ID of a person is: " << endl;
A::show();
}
};
void main()
{
A a;
B b;
a.set();
cout << endl;
b.Bshow();
cout << endl;
system("pause");
}
答案 0 :(得分:1)
当我在
show()
中调用main
功能时,它直接打印名称和 ID ,但是当我调用B类功能时名称和 ID 完全空白。
我猜你忘了先叫b.set()
。
a
和b
是两个不同的对象。状态a
由呼叫a.set()
设置。这对设置b
的状态没有任何作用。因此,b
的成员变量仍然是默认构造的。
使用:
b.set();
b.Bshow();
cout << endl;
答案 1 :(得分:1)
B(b)的实例不继承a的值。它只继承set方法。你需要在b上调用set方法,而不是在。
上https://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm
答案 2 :(得分:0)
由于您已使用A
access specifier
继承了类public
,因此可以使用类对象公开访问类set()
的{{1}}公共成员函数A
。你忘了先调用b.set()。
考虑你的例子:
C ++类定义不分配内存。类与B
和typedef
类似。 C ++对象创建分配内存。我想您理解的问题是您假设类定义会为它们分配内存,因为您已将类struct
继承到类A
,类B
和{{1}将共享共同的内存集。但事实并非如此。
在内存级别,您将有两个对象(至少)。一个是类B
,另一个是类A
。类A
对象B
将包含数据成员A
和a
。类name
将拥有自己的数据成员以及从类ID
继承的数据成员。但是,对象B
和对象A
都有自己的(不同的)数据成员a
和b
。通过调用name
初始化类ID
的对象A
数据成员(a
和name
)不会初始化类{{1}的数据成员对象ID
。
相反,您应该拨打a.set()
来初始化对象B
的数据成员b
和b.set()
。
看看下面的代码:
b
您可以查看此link,其中解释了继承在内存级别的工作原理。