对象的内存空间:
对象的大小=所有成员变量的大小之和
eg:
class CRectangle{
public:
int w, h;
void Init(int w_, int h_){
w = w_; h = h_;
}
int Area(){
return w * h;
}
int Perimeter(){
return 2*(w + h);
}
};//必须要有分号
CRectangle类的对象,sizeof(CRectangle) = 8(两个int)
每个对象各自有自己的存储空间
一个对象的某个成员变量被改变,不会影响到其他的对象
对象之间的运算
对象之间可以用’='进行赋值
不能用‘==’,‘!=’, ‘>’, ‘<’, ‘>=’, '<='进行比较,除非这些运算符经过了重载
访问类的成员变量和成员函数
用法1:对象名.成员名
CRectangle r1, r2;
r1.w = 5;
r2.Init(3, 4);
//r1 r2就是对象
用法2:指针->成员名
CRectangle r1, r2;
CRectangle *p1 = &r1;
CRectangle *p2 = &r2;
p1->w = 5;
p2->Init(3, 4);
用法3:引用名.成员名
类的成员函数的另一种写法
成员函数和类的定义分开写
class CRectangle{
public:
int w, h;
int Area();//成员函数在此处声明
int Perimeter();
void Init(int w_, int h_);
};
//函数的定义放外面,加上CRectangle::
void CRectangle::Init(int w_, int h_){
w = w_; h = h_;
}
int CRectangle::Area(){
return w * h;
}
int CRectangle::Perimeter(){
return 2*(w + h);
}
类成员的可访问范围
private:指定私有成员,只能在成员函数内被访问
public:指定公有成员,可以在任何地方被访问
protected:制定保护成员
class className{
private:
私有属性和函数
public:
公有属性和函数
protected:
保护属性和函数
}
缺省为私有成员
class Man{
int nAge;//私有成员
char szName[20];//私有成员
public:
void SetName(char *Name){
strcpy(szName, Name);
}
};
class CEmployee{
private:
char szName[30];
public:
int salary;
void setName(char * name);
void getName(char * name);
void averageSalary(CEmployee e1, CEmployee e2);
};
void CEmployee::setName(char *name){
strcpy(szName, name);
}
void CEmployee::getName(char *name){
strcpy(name, szName);
}
void CEmployee::averageSalary(CEmployee e1, CEmployee e2){
salary = (e1.salary + e2.salary)/2;
}
int main(){
CEmployee e;
strcpy(e.szName, "Tom");//编译错,不能访问私有成员
e.setName("Tom");//ok
e.salary = 50000;//ok
return 0;
}
设置私有成员的目的:强制要求对成员变量的访问一定要通过成员函数进行,这样可以隐藏私有成员,保证程序少出错容易修改。