首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手C++有关问题

2012-04-15 
新手C++问题#includeiostreamusing namespace stdclass Student{public:int m_aint m_bStudent()Stu

新手C++问题
#include<iostream>
using namespace std;

class Student
{
public:
int m_a;
int m_b;
  Student();
Student(int a, int b, int c, int d, int e);
void Display();
protected:
int m_c;
private:
int m_d;
int m_e;
};

Student::Student()
{
m_a=0;
m_b=0;
m_c=0;
m_d=0;
m_e=0;
}

Student::Student(int a, int b, int c, int d, int e)
{
m_a=a;
m_b=b;
m_c=c;
m_d=d;
m_e=e;
}

void Student::Display()
{
cout<<m_a<<m_b<<m_c<<m_d<<m_e<<endl; 
}

class Teacher:protected Student
{
public:
Teacher();
Teacher(int f);
void Display1();
private:
int m_f;
};

Teacher::Teacher()
{
m_f=4;
}

Teacher::Teacher(int f)
{
m_f=f;
}

void Teacher::Display1()
{
Display();
cout<<m_f<<endl;
}

int main()
{
Student a(1,2,3,4,5);/*这里给对象a的数据成员赋值*/
a.Display();/*输出对象a中的数据,输出结果是12345*/
Teacher b(6);/*这里给对象b数据成员赋值*/
b.Display1();
/*输出对象b中的数据,输出结果是000006.。。。。。。这里不明白。。
void Teacher::Display1()
{
Display();
cout<<m_f<<endl;
}。。。。Display1()调用了Display()。。应该输出12345再输出6.。。求大神;*/
return 0;
}


问题在注释部分。。。谢谢

[解决办法]
Teacher对象b创建的时候,你只给m_f赋值了,调用基类默认的无参的构造函数,Teacher类继承的基类Student的对象的成员m_a,m_b,m_c,m_d,m_e的值都是0.
[解决办法]
Teacher继承自 Student 所以 Teacher b(6);/*这里给对象b数据成员赋值*/
会调用 Student的默认构造函数,所以会输出00000
[解决办法]
LZ,如果照你这么理解的话,如果我定义了两个基类对象如下:
Student a1(1,2,3,4,5);
Student a2(1,2,3,4,5);

那么,派生类对象b的基类部分是a1还是a2呢?
它们之间是毫无关系的。。。
好好想想吧。
[解决办法]
Teacher类继承的基类Student的对象的成员,所以会输出00000.

热点排行