目录
一.类的定义
二.类的权限
三.class和struct的区别
四.类的实例化
五.类对象的存储方式结构与类计算大小
一.类的定义
类中的元素称为类的成员:
类中的数据称为类的属性或者成员变量
类中的函数称为类的方法或者成员函数
class ClassName
{
//类体:由成员函数和成员变量组成
};
class --- 定义类的关键字
ClassName --- 类名
{} --- 类的主体
类有两种定义方式:
1.不分文件,成员函数在类内实现,声明与定义不分离
2.分文件,成员函数的声明与定义分离
实现成员函数声明与定义分离的方式:
class Classname
{
public:
void Print();
};
void Classname::Print()
{
cout << "hello" << endl;
}
二.类的权限
类将对象的属性与方法结合在一起,让对象更加完善,通过访问权限来达到选择性的将其接口提供给外部的用户使用的目的
访问权限分三种:
1.public:公有,修饰的成员在类外可以直接被访问
2.protected:保护,修饰的成员在类外不能直接被访问
3.private:私有,修饰的成员在类外不能直接被访问
访问权限的作用域:从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
class的默认访问权限为private,访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
三.class和struct的区别
C++需要兼容C语言,所以C++中struct既可以当成结构体,也可以当成类。
struct与class定义类有一点不同:
class的默认访问权限为private
struct的默认访问权限为public(因为struct要兼容C)
四.类的实例化
用类的类型创建对象的过程,称为类的实例化
类只是一个模型一样的东西,限定了类有哪些成员,有哪些方法。当定义出一个类时,实际并没有分配实际的内存空间来存储它,当对类进行实例化的时候,在为类实例化出的具体对象开辟空间,并且一个类可以实例化出多个对象,类所开辟的只存储类成员变量,而不会存储成员函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int gal; //这是定义
class ClassName
{
public:
void Print(); //这是声明
private:
int _num; //这是声明
};
void ClassName::Print()
{
//这是定义
cout << "halo" << endl;
}
int main()
{
ClassName c1; //这是定义
return 0;
}
总而言之,声明与定义的区别就是:声明没有开空间,而定义开了空间
五.类对象的存储方式结构与类计算大小
首先,类计算大小与C语言中struct计算大小的规则是一样的,都遵循内存对齐原则
类的属性与方法是分开存储的,内存给类实例化出的对象开辟空间时只开辟成员变量所占用的空间,类中的所有成员函数全部都会被放入公共代码区,并且会被此类域修饰。也就是说成员函数是不占空间的,在计算类实例化对象的空间时,只计算成员变量的大小。
空类所占空间是多少
计算类的大小使用内存对齐原则,那么一个空类的大小呢?是0吗?
计算一个空类的大小,计算结果是占1个字节。
另一个角度:取地址是可以打印出来的,假设没有开辟空间的话,空间都没有,更何谈地址呢?
所以需要有1个字节来给这个实例化对象“占位”
以上这个例子也可以说明成员函数不占空间,计算出来的大小与空类相同,都是1个字节