类与对象
一、类与对象的认知
1.C语言时面向过程的,更注重的是过程,分析求解问题的步骤、算法,通过函数条用逐步解决问题。C++是面向对象的,注重的是对象,将问题拆分成不同的对象,靠对象之间的交互完成。
二、类的引入
1.C语言中,结构体内只能定义变量,C++中既可以定义变量,也可以定义函数。
三、类的定义
1.类的一般定义格式如下:
class className
{
访问限定符:
类成员函数
访问限定符:
类成员变量
};
2.访问限定符及其说明:
public(公有)、protected(保护)、private(私有)
(1)public修饰的成员在类外可以直接被访问。
(2)被修饰的成员的作用域从该访问限定符出现的位置开始到下一个访问限定符的出现为止。
(3)protected和private修饰的成员在类外不能直接被访问。
(4)class定义的类默认访问权限为private,struct定义的类默认访问权限为public。(需要兼容C)
四、面向对象的三大特性(封装、继承、多态)之封装的理解
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
五、类的作用域
class Person
{
public:
void PrintPerson();
private:
char _name[20];
char _gender[3];
int _age;
};
void Person::PrintPerson()//指明PrintPerson是属于Person这个类
{
cout << _name << _gender << _age << endl;
}
六、类的实例化理解
1.类就像一个模型,一张图纸,并不占用内存空间,把这张图纸应用实际才会占用空间。
class Person
{
public:
void PrintPerson();
private:
char _name[20];
char _gender[3];
int _age;
};
//定义类并不占用内存空间
void test()
{
Person man; //man这个对象才能存储数据
man._name = "TOM";
man._gender = "男";
man._age = 10;
}
七、类对象模型
1.类的大小计算:
class A1
{
public:
void f1(){}
private:
int _a;
};
class A2
{
public:
void f2(){}//只有函数的类
};
class A3{};//空类
int main()
{
printf("%d\n", sizeof(A1));//4
printf("%d\n", sizeof(A2));//1
printf("%d\n", sizeof(A3));//1
return 0;
}
结论:一个类的大小,实际就是该类中成员变量所占字节大小之和,也要像结构体计算一样进行内存对齐,特别注意空类的大小为1。那么有没有兴趣知道为什么空类的大小为1。
深度探索c++对象模型中是这样说的,那是被编译器插进去的一个char,使得这个class的不同实体(object)在内存中配置独一无二的地址。也就是说这个char是用来标识类的不同对象的。
上一篇: 私有private