| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:初学c++类遇到的疑惑,忘大家帮忙看下,谢谢了!
只看楼主 加入收藏
qshzh102
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2010-9-14
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
初学c++类遇到的疑惑,忘大家帮忙看下,谢谢了!
#include <iostream.h>
#include <string.h>
class person
{
    char name[20];
    char sex;
    int age;
public:
    void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
    void getname(char *na)      
    {
        strcpy(na,name);
    }
    char getsex()
    {
        return sex;
    }
    int getage()
    {
        return age;
    }
}

 main()
{
    person a;
    char name[20];
    a.setdata("cheng",'F',20);
    a.getname(name);
    cout<<"name:"<<name<<endl;
    cout<<"sex:"<<a.getsex()<<endl;
    cout<<"age"<<a.getage()<<endl;
}

为什么上面在类的定义中,已经定义了
void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
之后还要定义
void getname(char *na)      
    {
        strcpy(na,name);
    }
这个函数啊?麻烦大家帮忙看下替小弟解答下疑惑了 谢谢
搜索更多相关主题的帖子: 初学 
2010-11-01 10:31
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:2 
void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
这个函数的功能相当于构造函数,就是对类实例化,而
void getname(char *na)      
    {
        strcpy(na,name);
    }
这个函数功能 是 使能够在类外 访问类的私有成员!

两者没有什么联系啊!

If You Want Something, Go Get It, Period.
2010-11-01 13:15
qshzh102
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2010-9-14
收藏
得分:0 
有了
 void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }

这个函数后是不是可以在main()中将void getname(char *na)      
    {
        strcpy(na,name);
    }
省掉,因为在setdata函数已经对其进行了赋值,直接通过cout输出即可
2010-11-01 14:30
gaoce227
Rank: 4
来 自:山东
等 级:业余侠客
帖 子:134
专家分:218
注 册:2008-4-5
收藏
得分:2 
比较乱,两个name变量,看迷糊了。
2010-11-01 14:58
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
回复 3楼 qshzh102
不能在类外直接访问类的私有成员,只能通过写类的成员函数的方式访问类的私有成员!
不信你 直接输出 cout<<A.name 是不行的

If You Want Something, Go Get It, Period.
2010-11-01 16:13
qshzh102
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2010-9-14
收藏
得分:0 
回复 5楼 m21wo
哦 有些明白了 就是和函数中的形参和实参间的数据传递了,通过调用a.getname(name)对main()中的name进行赋值
是不是这个样子啊版主?
2010-11-01 16:39
小鱼漂流
该用户已被删除
收藏
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-01 20:05
在家的风源
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2010-11-1
收藏
得分:2 
版主都5个太阳了,我得加油。。
2010-11-01 20:15
a396280396
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:12
专家分:25
注 册:2010-10-13
收藏
得分:0 
这个很简单理解啊,类外输入赋值给类的私有变量,通过
void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
去赋值,因为类外是不能直接访问类的私有变量的

相反的,当类里的私有变量要输出类外时,也是不能直接输出的,所以也应该通过其它函数的调用来实现,也就是
    void getname(char *na)      
    {
        strcpy(na,name);
    }
 之所以用strcpy函数是因为字符串数组不能直接进行值传递,而必须通过赋值函数去实现



2010-11-01 20:30
weiqiang
Rank: 2
等 级:论坛游民
帖 子:48
专家分:52
注 册:2010-10-18
收藏
得分:0 
我来学习的
2010-11-02 12:50
快速回复:初学c++类遇到的疑惑,忘大家帮忙看下,谢谢了!
数据加载中...
 
   



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

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