关键词:
类与对象(上篇)
面向过程和面向对象的初步认识
面向过程(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++从入门到入土第四篇:类与对象(中篇)
类与对象(中篇)文章目录类与对象(中篇)类的六个默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载const成员函数类的六个默认成员函数构造函数构造函数,是一种特殊的方法。主要用来在创建... 查看详情
c++从入门到入土第五篇:类与对象(下篇)
类与对象(下篇)文章目录类与对象(下篇)再谈构造函数构造函数体赋值初始化列表引用成员变量const成员变量自定义类型成员单参构造隐式类型转换static成员友元友元函数友元类再谈构造函数构造函数体赋值... 查看详情
c++从入门到入土第十三篇:vector的模拟实现
c++从入门到入土第二篇:类和对象基础(代码片段)
系列文章目录【C++从入门到入土】第一篇:从C到C++.文章目录系列文章目录前言一、类和对象的基本概念结构化程序设计面向对象的程序设计使用类的成员变量和成员函数二、类和对象基础类成员的可访问范围构... 查看详情
c++从入门到入土第十八篇:多态
多态文章目录多态什么是多态虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写(基类与派生类析构函数的名字不同)重载、覆盖(重写)、隐藏(重定义)的对比抽象类多态的原理虚... 查看详情
c++从入门到入土第十八篇:多态
多态文章目录多态什么是多态虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写(基类与派生类析构函数的名字不同)重载、覆盖(重写)、隐藏(重定义)的对比抽象类多态的原理虚... 查看详情
c++从入门到入土第八章:string类的使用
string类的使用string类的文档介绍文章目录string类的使用string类的了解string类创建对象的方式(constructor)析构赋值string对象的访问[]运算符重载at接口backfront迭代器正向迭代器begin/end反向迭代器rbegin/rend范围for与迭代器容量相关接口si... 查看详情
c++从入门到入土第十七篇:继承
继承文章目录继承什么是继承继承方式基类和派生类赋值转换继承中的作用域派生类的默认成员函数多继承什么是继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和... 查看详情
c++从入门到入土第十七篇:继承
继承文章目录继承什么是继承继承方式基类和派生类赋值转换继承中的作用域派生类的默认成员函数多继承什么是继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和... 查看详情
《侯老师c++面向对象开发》从入门到“入土”(代码片段)
目录一、需要的语言基础1.1变量(Variables)1.2类型(types)1.3作用域(scope)1.4循环(loops)1.5流程控制/判断(judge)1.6、了解程序需要编译、连接才可运行1.7、使用工具进行编译(避免sh... 查看详情
c++从入门到入土第十五篇:list的模拟实现
c++从入门到入土第十一篇:string模拟实现(续)
c++从入门到入土第十篇:string模拟实现
string模拟实现文章目录string模拟实现传统写法1.构造函数2.析构函数3.拷贝构造4.赋值运算符现代写法1.构造函数2.析构函数3.拷贝构造4.赋值运算符类的成员传统写法1.构造函数正确写法:这才是一个空的string类对象,字符... 查看详情
c++从入门到入土第一篇:初识c++
C++入门文章目录C++入门C++关键字(C++98)命名空间1.命名空间的定义2.命名空间的使用C++输入&输出缺省参数1.缺省参数概念2.缺省参数分类函数重载C++关键字(C++98)C+... 查看详情
c++从入门到入土第二篇:c++入门(续)
C++入门文章目录C++入门引用1.引用概念2.引用特性3.常引用4.使用场景5.引用与指针的区别内联函数1.概念2.特性auto关键字基于范围的for循环指针空值nullptr(C++中的关键字)引用1.引用概念引用变量是一个... 查看详情
c++从入门到入土第十九篇:二叉搜索树(代码片段)
二叉搜索树文章目录二叉搜索树二叉搜索树概念原理性质复杂度二叉搜索树操作1.结构2.查找3.插入4.中序遍历5.拷贝6.销毁7.删除二叉搜索树概念二叉查找树(BinarySearchTree),(又:二叉搜索树,二叉排序树... 查看详情
java从入门到入土100天,第三天
第三天,分支判断循环 1、switch() (1)括号中的必须是intchar类型 (2)break是可选的,其作用就是退出switch这个整体,如果不加,在break后面case、default后的语句会直接使用。 (3)default只出现一次,位置一般是在... 查看详情
关于从入门three.js到做出3d地球这件事(第三篇:光与影)(代码片段)
关于从入门three.js到做出3d地球这件事(第三篇:光与影)本篇介绍 通过前面几篇我们了解了坐标系、相机、物体等概念,这一篇我们要让3d世界里的物体,更像我们的现实世界的物体,我们要为3d世界绘制光与影。1.高级材料 ... 查看详情