类的定义
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。
类的访问限定符及封装
C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
访问限定符的说明:
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- class的默认访问权限为private,struct为public(因为struct要兼容C)
封装:我们把类数据和方法都封装到一起。不想给别人看到的用protected/private把成员封装起来。开放一些共有的成员函数对成员合理的访问。
class CGoods
{
public:
//方法成员
void InitGoods(const char* n, float p, int c);
void GetName(char n[]);
float GetPrice();
int GetCount();
float GetTotal();
private:
//数据成员
char name[20];
float price;
int count;
};
类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。
void cgoods::initgoods(const char* n, float p, int c)
{
strcpy(name, n);
price = p;
count = c;
}
void cgoods::getname(char n[])
{
strcpy(n, name);
}
float cgoods::getprice()
{
return price;
}
int cgoods::getcount()
{
return count;
}
float cgoods::gettotal()
{
return price * count;
}
类的存储
类的大小只计算成员变量不用计算成员函数
typedef struct Test
{
short a;
struct //这里的如果有了类型 类型不占大小(有无名字)
{
int b;
double c;
char e;
};
int d;
}Test;
void main()
{
cout << sizeof(Test) << endl;
}
this指针
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
this指针的特性:
- this指针的类型:类类型* cons
- t2. 只能在“成员函数”的内部使用
- this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
- this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。
- this指针不能为空。