class A
{
int m, n;
public:
int a, b;
int func1();
private:
int c, d;
void func2();
public:
char e;
int f;
int func3();
};
在上面的类 A 中,成员 a、b 和 func1 是公有的,c、d 和 func2 是私有的,e、f 和 func3 又是公有的。m 和 n 没有指定可访问范围,则是私有的。如果把 class 换成 struct,那么 m 和 n 就是公有的。
#include <iostream>
#include <cstring>
using namespace std;
class CEmployee {
private:
char szName[30]; //名字
public:
int salary; //工资
void setName(char* name);
void getName(char* name);
void averageSalary(CEmployee el, CEmployee e2);
};
void CEmployee::setName(char* name) {
strcpy(szName, name); //ok
}
void CEmployee::getName(char* name) {
strcpy(name, szName); //ok
}
void CEmployee::averageSalary(CEmployee el, CEmployee e2)
{
salary = (el.salary + e2.salary) / 2;
}
int main()
{
CEmployee e;
strcpy(e.szName, "Tom1234567889"); //编译出错,不能访问私有成员
e.setName("Tom"); //ok
e.salary = 5000; //ok
return 0;
}
在上面的程序中,szName 是私有成员,其他成员都是公有的。strcpy(man1, szName, "Tom1234567889");
这样的语句。假设需要将该程序移植到内存空间紧张的手持设备上,希望将 CEmployee 类的成员变量 szName 改为 char szName[5],以便节约空间,那么所有这样的语句都要找出来检查一番并修改,以防止数组越界。这显然很麻烦。e.setName("Tom12345678909887");
就算 szName 的长度变短了,上面的语句也不需要修改,只要修改 setName 成员函数,在其中去掉超长的部分,确保数组不越界就可以了。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有