【问题标题】:(Multiple inheritance) C++ Create Child class inherits from two classes(多重继承)C++ 创建子类继承自两个类
【发布时间】:2017-05-19 18:34:45
【问题描述】:

下面的多重继承示例代码不起作用。请问,你能帮忙吗?

子类继承自父类。使用 Child 中的 show() 函数从每个父类中打印出一个对象值。

#include<iostream>
#include<string.h>

using namespace std;

class B
{
    protected:
        string bname;
    public:
        B (string bname1)
            {bname=bname1;}
        string getBName()
            {return bname;}
};
    
class C
{
    protected:
        string cname;
    public:
        C (string cname1)
            {cname=cname1;}
        string getCName()
            {return cname;}
};

class A: public B, public C // MultipleInheritance
{
    private:
        string aname;
    public:
        A ()
            { 
                cout<<"What is the B name? : " << endl ;
                cin >> bname;
                cout << "What is the C name? : " << endl;
                cin >> cname; 
                cout <<"What is the A name? : "<< endl ;
                cin >> aname;
            }
        A (string bname1 , string cname1, string aname1)    
            {bname=bname1; cname=cname1;aname=aname1;}
        string getCName()
            {return cname;}
};

int main ()
{
    A a2 ("parant1","parant2","child1");
    cout<<"constructor >>> parent Name 1 : \t"<< a2.getBName()<<"parent Name 2 : "<< a2.getCName()<<" child Name 1: " <<a2.getAName()<<endl;
}

我是初学者。随意编辑问题以使其更简单。

【问题讨论】:

  • 不要用&lt;string.h&gt;,已经过时了,用&lt;string&gt;
  • 另外,继承的类不能访问其父类的私有元素。将字段 fnamemname 设为受保护,以便孩子可以访问它
  • 不仅 已过时,而且包含错误!它是 strlenstrcmp 之类的 C 头文件,在 C++ 世界中是 &lt;cstring&gt;&lt;string&gt; 持有std:string

标签: c++ class oop inheritance visual-c++


【解决方案1】:

MotherFather 各自只有一个构造函数,并且该构造函数接受一个字符串,因此您必须在Child 的构造函数中提供该字符串。

public:
    Child (string name, string mname, string fname)
       :Mother(mnane), Father(fname)
    {
         cname = name;
    }

此外,要求名称的代码必须在构造函数之外(最好完全在类之外)

【讨论】:

    【解决方案2】:

    谢谢詹姆斯柯伦 如果有人想检查最终代码,希望对您有所帮助。

    这是对代码的新更新。

    #include<iostream>
    #include<string.h>
    
    using namespace std;
    
    class Mother 
    {
        protected:
            string mname;
        public:
            Mother (string mname1)
                {mname=mname1;}
            string getMName()
                {return mname;}
    };
    
    class Father 
    {
        protected:
            string fname;
        public:
            Father (string fname1)
                {fname=fname1;}
            string getFName()
                {return fname;}
    };
    
    class Child : public Mother, public Father      // MultipleInheritance
    {
        private:
            string cname;
        public:
            Child (string mname1 , string fname1, string cname1);
            string getCName();
    };
    
    Child :: Child (string mname1, string fname1, string cname1) : Mother(mname1), Father(fname1)
        {cname=cname1;}
    string Child :: getCName()
        {return cname;}
    
    void show()     //I use constructor  
    {
        Child c2 ("Amneh","Ahmad","Mohammad");
        cout<<"Constructor >>>\n Mother Name : "<< c2.getMName()<<"\n Father Name : "<< c2.getFName()<<"\n Child Name : " <<c2.getCName()<<endl;
    }
    
    int main ()
    {
        show();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-12
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2015-04-09
      相关资源
      最近更新 更多