为什么我无法设置类名并继承它并显示在另一个类中,如下面给出的代码?我做错了什么?
#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();
}
答案 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();}
}