C++从入门到入土第三篇:类与对象(上篇)
Posted 李憨憨_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++从入门到入土第三篇:类与对象(上篇)相关的知识,希望对你有一定的参考价值。
类与对象(上篇)
面向过程和面向对象的初步认识
面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。 面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成。 这个适合简单任务,不需要过多协作的情况下。比如,如何开车?我们很容易就列出实现步骤:1. 发动车 2. 挂挡 3.踩油门 4. 走你
面向过程适合简单、不需要协作的事务。 但是当我们思考比较复杂的问题,比如“如何造车?”,就会发现列出1234这样的步骤,是不可能的。那是因为,造车太复杂,需要很多协作才能完成。此时面向对象思想就应运而生了。 面向对象(Object)思想更契合人的思维模式。我们首先思考的是“怎么设计这个事物?” 比如思考造车,我们就会先思考“车怎么设计?”,而不是“怎么按步骤造车的问题”。这就是思维方式的转变。 面向对象思想思考造车,发现车由如下对象组成:
1. 轮胎 2. 发动机 3. 车壳 4. 座椅 5. 挡风玻璃
为了便于协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提高了效率。但是,具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开面向过程思想!
因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。
我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程!
类的引入
//C++中常用的类的定义方式:class 类名 { 所有成员 };
class Student
{
public:
//成员函数
void SetStudentInfo(const char* name, const char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void PrintStudentInfo()
{
cout << _name << " " << _gender << " " << _age << endl;
}
//成员变量或者属性
char _name[20];
char _gender[3];
int _age;
};
void test()
{
Student stu;
stu.SetStudentInfo("abc", "男", 20);
stu.PrintStudentInfo();
cout << stu._gender << endl;
}
类的访问限定符
访问限定符说明
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- class的默认访问权限为private,struct为public(因为struct要兼容C)
访问权限修饰符只限制成员在类外的访问权限,在类内部,成员之间可以相互访问
类的实例化
类对象模型
类对象大小的计算
类的大小的计算:按照结构体的规则计算
很明显可以看出,空类占一个字节的空间,看不到任何显示定义的成员;
C这里也不包含成员变量,只包含成员函数,成员函数在这个地方是不占对象的空间的
this指针
this指针一般存在与栈中
在不做解引用操作的前提下,this指针可以为空
以上是关于C++从入门到入土第三篇:类与对象(上篇)的主要内容,如果未能解决你的问题,请参考以下文章