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

初学c++类遇到的疑惑,忘大家帮忙看下,谢谢了!

qshzh102 发布于 2010-11-01 10:31, 685 次点击
#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);
    }
这个函数啊?麻烦大家帮忙看下替小弟解答下疑惑了 谢谢
9 回复
#2
m21wo2010-11-01 13:15
void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
这个函数的功能相当于构造函数,就是对类实例化,而
void getname(char *na)      
    {
        strcpy(na,name);
    }
这个函数功能 是 使能够在类外 访问类的私有成员!

两者没有什么联系啊!
#3
qshzh1022010-11-01 14:30
有了
 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输出即可
#4
gaoce2272010-11-01 14:58
比较乱,两个name变量,看迷糊了。
#5
m21wo2010-11-01 16:13
回复 3楼 qshzh102
不能在类外直接访问类的私有成员,只能通过写类的成员函数的方式访问类的私有成员!
不信你 直接输出 cout<<A.name 是不行的
#6
qshzh1022010-11-01 16:39
回复 5楼 m21wo
哦 有些明白了 就是和函数中的形参和实参间的数据传递了,通过调用a.getname(name)对main()中的name进行赋值
是不是这个样子啊版主?
#7
2010-11-01 20:05
   你也可以这样理解,其实这个函数就是对main中的name进行赋值。不过你这样对类的封装性不好,直接输出结果就行了,
    void getname(char *na)      
    {
        strcpy(na,name);
    }
这句改为:  char *getname()
             {
                 return name;
              }
main 中输出改为: cout<<"name:"<<a.getname()<<endl;
这样体现整个算法的一致性,也不用浪费内存。
#8
在家的风源2010-11-01 20:15
版主都5个太阳了,我得加油。。
#9
a3962803962010-11-01 20:30
这个很简单理解啊,类外输入赋值给类的私有变量,通过
void setdata(char na[],char s,int a)
    {
        strcpy(name,na);
        sex=s;
        age=a;
    }
去赋值,因为类外是不能直接访问类的私有变量的

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



#10
weiqiang2010-11-02 12:50
我来学习的
1