通过B类我想在main中打印A类函数

时间:2017-01-08 07:19:09

标签: c++

我正在尝试通过 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"); 
}

3 个答案:

答案 0 :(得分:1)

  

当我在show()中调用main功能时,它直接打印名称 ID ,但是当我调用B类功能时名称 ID 完全空白。

我猜你忘了先叫b.set()

ab是两个不同的对象。状态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 ++类定义不分配内存。类与Btypedef类似。 C ++对象创建分配内存。我想您理解的问题是您假设类定义会为它们分配内存,因为您已将类struct继承到类A,类B和{{1}将共享共同的内存集。但事实并非如此。

在内存级别,您将有两个对象(至少)。一个是类B,另一个是类A。类A对象B将包含数据成员Aa。类name将拥有自己的数据成员以及从类ID继承的数据成员。但是,对象B和对象A都有自己的(不同的)数据成员ab。通过调用name初始化类ID的对象A数据成员(aname)不会初始化类{{1}的数据成员对象ID

相反,您应该拨打a.set()来初始化对象B的数据成员bb.set()

看看下面的代码:

b

您可以查看此link,其中解释了继承在内存级别的工作原理。