** c++类与对象 **

编出来发现有太多问题了,求个大佬帮忙改改,救救孩子吧😭😭
#include
#include <string.h>
using namespace std;

class CEmployee{
private:
char szName[30];
public:
int salary;//工资
void setName(char *Name);
void getName(char *Name);
void avergeSalary(CEmployee e1,CEmployee e2);
};
void CEmployee::setName(char *Name){
strcpy(szName,Name);
}
void CEmployee::getName(char *Name){
strcpy(Name,szName);
}
void avergeSalary(CEmployee e1,CEmployee e2){
cout<<e1.szName;
salry=(e1.salary+e2.salary)/2;
}
int main()
{
CEmployee e;
//strcpy(e.szName,"tom1324567889") 错误! 不能直接访问私有成员
e.setName("Tom");
e.salary=5000;
return 0;
}


#include <iostream>
#include <string.h>
using namespace std;

class CEmployee {
public:
    char szName[30];
public:
    int salary;//工资
    void setName(const char* Name);
    void getName(char* Name);
    void avergeSalary(CEmployee e1, CEmployee e2);
};
void CEmployee::setName(const char* Name) {
    strcpy(szName, Name);
}
void CEmployee::getName(char* Name) {
    strcpy(Name, szName);
}
void avergeSalary(CEmployee e1, CEmployee e2) {
    cout << e1.szName;
    float salry = (e1.salary + e2.salary) / 2;
}
int main()
{
    CEmployee e;
    strcpy(e.szName, "tom1324567889"); //错误! 不能直接访问私有成员
    e.setName("Tom");
    e.salary = 5000;
    return 0;
}

你都设计成私有成员了,肯定不能直接访问了。你再写一个public函数去访问私有成员。

首先要明白类的封装一般将属性放在私有,利用公用的接口去访问和修改这些属性。这样就体现了封装的隐蔽性。
那么再看你这个类定义,其实可以把名字的字符数组定义也放在私有中。公有就就你定义的这几个函数。然后那个求加类的平均值函数如果在类外定义都话也需要加上作用域。
然后我看你后面设置名字的代码,你是直接去利用对象访问属性,这是不好也不可取的。上面说了将属性设为私有。留下公有的函数接口,那么这个函数就是给我们调用去修改属性的。所以要调用函数去初始化属性。
例如e.setname(要设置的名字);
然后对于你的那个getname函数我认为是不妥的,你写这个函数应该是为了输出这个类对象的名字,所以把定义里改成cout<<e.szname<<endl;
同理,把工资也用同样的办法封装。
不懂再问,望采纳!