| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 994 人关注过本帖
标题:这个类的继承性的题错在哪了呢?
只看楼主 加入收藏
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
这个类的继承性的题错在哪了呢?
原题:
涉及父亲类Father,母亲类Mother,子女类Child,其主要数据成员是姓名,年龄和民族,子女继承了父亲的姓,母亲的民族。声名一个子女对象,并输出子女及其父母的姓名和民族信息。
这个是存放类的头文件:
#include <iostream.h>
#include <string.h>
class CFather
{protected :
 char family_name[20],given_name[20];
 int age;
 char nation[20];
public:
 CFather (char *px,char *py,int a,char *pz)
 {strcpy(family_name,px);
 strcpy(given_name,py);
 age=a;
 strcpy(nation,pz);
 cout<<"父亲:"<<endl<<"姓:"<<family_name<<endl<<"名:"<<given_name<<endl<<"年龄:"<<age<<endl<<"民族:"<<nation<<endl;
 }
};
class CMother
{protected :
 char family_name[20],given_name[20];
 int age;
 char nation[20];
public:
 CMother(char *px1,char *py1,int a1,char *pz1)
 {strcpy(family_name,px1);
 strcpy(given_name,py1);
 age=a1;
 strcpy(nation,pz1);
 cout<<"母亲"<<endl<<"姓:"<<family_name<<endl<<"名:"<<given_name<<endl<<"年龄:"<<age<<endl<<"民族:"<<nation<<endl;
 }
};
class CChild:public CFather,public CMother
{ protected :
  char given_name1[20];
  public:
    CChild (char *p,char *px,char *py,int a,char *pz,char *px1,char *py1,int a1,char *pz1):CFather(px,py,a,pz),CMother(px1,py1,a1,pz1)
    {strcpy(given_name1,p);}
};


这个是存放主函数的源文件:
#include "3 66.h"
void main()
{
 CChild c("统","赵","云",44,"汉","貂","禅",40,"苗");
cout<<"子女:"<<endl<<"姓:"<<CFather ::family_name<<endl<<"名:"<<given_name1<<endl<<"民族:"<<CMother ::nation<<endl<<"年龄:20"<<endl;
}

调试出错:
c:\documents and settings\aa\桌面\vc\任子健第三次作业\3 66\3 66main.cpp(5) : error C2597: illegal reference to data member 'CFather::family_name' in a static member function
c:\documents and settings\aa\桌面\vc\任子健第三次作业\3 66\3 66main.cpp(5) : error C2065: 'given_name1' : undeclared identifier
执行 cl.exe 时出错.



大家帮忙看看是什么原因造成的,怎么改?谢谢!!!


[ 本帖最后由 yydjtcy 于 2009-10-20 21:07 编辑 ]
搜索更多相关主题的帖子: 继承性 
2009-10-20 21:03
caolihui1008
Rank: 2
来 自:石家庄
等 级:论坛游民
帖 子:33
专家分:75
注 册:2009-10-19
收藏
得分:1 
首先family_name被设为protection调用方式错误,我没做但感觉主要错误应该都在最后的输出,你在看看吧
2009-10-21 09:34
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:9 
CFather ::family_name
这种调用方式是调用静态成员的。
类成员变量的调用应该使用实例化类对象来调用,
2009-10-21 13:44
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 3楼 debroa723
课本上关于这种多继承二义性问题时就是说“只需在被引用的基类成员前加上基类名和作用域限定符”的啊,你说的那个“实例化类对象”什么意思?
2009-10-21 16:15
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 2楼 caolihui1008
我把主函数中这段代码“cout<<"子女:"<<endl<<"姓:"<<CFather ::family_name<<endl<<"名:"<<given_name1<<endl<<"民族:"<<CMother ::nation<<endl<<"年龄:20"<<endl;”放到派生类的构造函数中就正常了,运行结果就是我的要求,为什么就不能放在主函数中?
2009-10-21 16:55
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 3楼 debroa723
我把主函数中这段代码“cout<<"子女:"<<endl<<"姓:"<<CFather ::family_name<<endl<<"名:"<<given_name1<<endl<<"民族:"<<CMother ::nation<<endl<<"年龄:20"<<endl;”放到派生类的构造函数中就正常了,运行结果就是我的要求,为什么就不能放在主函数中?
2009-10-21 16:56
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 3楼 debroa723
自己有个牵强的理解了,谢谢,呵呵。
2009-10-21 17:56
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 2楼 caolihui1008
不是protected的问题,我有自己的理解了,呵呵,不过还是很感谢你。
2009-10-21 17:57
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
CFather tempFather;
tempFather.family_name = 10;
这就是实例化调用一个类成员变量。
 
这是写一个成员函数来调变量。
tempFather.GetFamilyName();

char* CFather::GetFamilyName(void)
{
   return family_name;
}


[ 本帖最后由 debroa723 于 2009-10-21 18:08 编辑 ]
2009-10-21 18:06
快速回复:这个类的继承性的题错在哪了呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028332 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved