设置类名继承并显示在另一个类中

时间:2014-03-21 22:05:51

标签: c++ inheritance

为什么我无法设置类名并继承它并显示在另一个类中,如下面给出的代码?我做错了什么?

#include<iostream>
#include<string>
using namespace std;
class dealer
{
    string name;
public:
    dealer(){};
    dealer(string n): name(n){};
    ~dealer(){};
    //void setname(string n){name = n;};
    void display(){cout<<name<<endl;}
};
class car : public dealer
{
public:
    dealer b;
    car(){};
    //car(string n): dealer(n){};
    ~car(){};
    void display(){dealer::display();}
}; 
int main ()
{
    dealer a("ABC");
    car c;
    c.display();
}    

1 个答案:

答案 0 :(得分:4)

工作正常。您使用c默认构造函数初始化car,该构造函数隐式调用dealer默认构造函数,该构造函数不执行任何操作。 name仍然是一个空字符串,这是打印出来的。要解决这个问题:

//car(string n): dealer(n){}; <--- uncomment
car c("ABC"); //initialize like this

来自评论:您的继承层次结构不正确。 car有一个dealer,但不是经销商。一个更好的设计系统看起来像这样:

class dealer { ... };
class car
{
    dealer &d;
    car(dealer &nd): d(nd) { };
    void display(){ d.display();}
}