注册 登录
编程论坛 C++教室

虚拟继承问题,求解疑问

唐兵 发布于 2013-05-19 11:15, 1067 次点击
#include <iostream>
#include<String>
using namespace std;
class Teacher
{protected:
void show()
{
    cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"address:"<<add<<endl;
}
    string name;
    string add;
    int age;
    int num;
   
    string title;
};
class Cadre
{
public:
   
    string name;
    string add;
    int age;
    int num;
    string post;
   
   
private:

};
class Teacher_Cadre:virtual public Teacher,virtual public Cadre
{   public:
void get();
 void display();
    int wages;
};
void Teacher_Cadre::display()
{
        show();
        cout<<title<<endl<<post<<endl<<wages;
}
void Teacher_Cadre::get()
{
    cout<<"input num,name,add,age,title,post,wages:"<<endl;
    cin>>num>>name>>add>>age>>title>>post>>wages;
}

  int main()
  {
       Teacher_Cadre c;
      c.get();
      c.display();
return 0;
  }
11 回复
#2
邓士林2013-05-19 20:39
函数前面加virtual
#3
peach54602013-05-20 16:33
答非所问
#4
唐兵2013-05-20 17:17
回复 3楼 peach5460
报错说这里有歧义,但我申明了虚拟类啊,请问错哪了
#5
peach54602013-05-21 08:23
以下是引用唐兵在2013-5-20 17:17:33的发言:

报错说这里有歧义,但我申明了虚拟类啊,请问错哪了

呵呵,我只是说楼上的貌似说错了
虚继承没怎么用过
#6
rjsp2013-05-21 08:27

void Teacher_Cadre::get()
{
    cout<<"input num,name,add,age,title,post,wages:"<<endl;
    cin>>num>>name>>add>>age>>title>>post>>wages;
}
中,你这里的num是指 Teacher::num 还是 Cadre::num ?神仙或许知道,但编译器肯定不知道。
#7
唐兵2013-05-22 12:42
回复 6楼 rjsp
但我前面申明为虚拟类了的啊
#8
rjsp2013-05-22 13:08
以下是引用唐兵在2013-5-22 12:42:45的发言:

但我前面申明为虚拟类了的啊

听不懂你在说什么,那好吧,既然“前面申明为虚拟类了”,那你希望
void Teacher_Cadre::get()
{
    cout<<"input num,name,add,age,title,post,wages:"<<endl;
    cin>>num>>name>>add>>age>>title>>post>>wages;
}
中的num是指 Teacher::num 还是 Cadre::num ?
#9
唐兵2013-05-23 12:36
回复 6楼 rjsp
如果这样的话就行:
#include <iostream>
#include<String>
using namespace std;
class Teacher
{protected:
void show()
{
    cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"address:"<<add<<endl;
}
    string name;
    string add;
    int age;
    int num;
   
    string title;
};
class Cadre :virtual public Teacher
{
public:
   
    string name;
    string add;
    int age;
    int num;
    string post;
   
   
private:

};
class Teacher_Cadre:virtual public Cadre
{   public:
void get();
void display();
    int wages;
};
void Teacher_Cadre::display()
{
        show();
        cout<<title<<endl<<post<<endl<<wages;
}
void Teacher_Cadre::get()
{
    cout<<"input num,name,add,age,title,post,wages:"<<endl;
    cin>>num>>name>>add>>age>>title>>post>>wages;
}

  int main()
  {
       Teacher_Cadre c;
      c.get();
      c.display();
return 0;
  }
但我想问我前面那种哪错了呢,该怎样改
#10
唐兵2013-05-24 12:33
求解
#11
邓士林2013-05-24 14:44
我看书上,我理解的也是加上虚拟类进行的
#12
坚持到底12013-05-24 14:53
这样改;
class Cadre
{
public:
   
    //string name;
    //string add;
    //int age;
    //int num;
    string post;
   
   
private:

};

1