CS100:C++面向对象学习笔记
2021/4/23 12:25:10
本文主要是介绍CS100:C++面向对象学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
CS100上学习的面向对象内容更为详细,也更为复杂。尽管这门课的进度相比SI100B已经放缓了不少,但由于我没有学习的基础,因此打算写一份笔记。
面向对象的编程主要具有三个特点:Encapsulation(封装)、Inheritance(继承)和Polymorphism(多态)。在SI100B中我们大概只学习了encapsulation,而剩下的内容会较为详细地记录。
杂项
Code Organization
Complication
Encapsulation/封装
封装的目的是为了隐藏信息及抽象化,达成分离interface(接口)和implementation(实现),从而能在使用interface的同时不需要知道任何有关implementation的内容。
Classes: Morphing from Struct/类
相比C中的structs(在C++中,class和struct实际上差别不大),classes有member functions(成员函数),这些fxns会在类的declaration(声明)中。
在类外实现时,成员函数的声明遵循如下格式:
ClassName::FunctionName
它们能够直接访问类中的所有member variables(成员变量)。
使用类时,相当于创造了一个类的instance(实例),它是类的type的一个对象。
Access/访问
Access Specifier/访问说明符
类中对象的默认specifier是private。
Member Functions/成员函数
Overload/重载
Constructor/构造函数
Inheritance/继承
Object Relationship/对象关系
C++中对象的关系有两种:inheritance和association,其中association又分为composition和aggregation。
Inheritance/继承
一个类继承的类是它的父类/基类(parent class/base class/superclass),它是那个类的子类/派生类(child class/derived class/subclass)。inheritance的格式是
class childClassName: public parentClassName
实际上inheritance可以通过private和protected完成。
可以进行多重inheritance,即一个child class有多个parent class。
child class可以use(使用parent的behaviours),extend(创建新的behaviours)和replace(override parent的behaviours)。
继承的对象是parent class的public fxns&vars,protected fxns&vars和private vars,但private vars不可以直接被child class访问。如果child希望访问private vars,可以通过访问protected fxns的方式与这些变量进行交互。
Overriding
overloading和overriding的区别是,overloading是使用相同的函数名,但对于每个overloaded implementation有不同的参数;而overriding是使用相同的函数名和参数,但有不同的implementation。
overriding只可能通过inheritance实现。
值得注意的是,overriding的fxn可以直接通过scope resolution operator(域解析运算符,即::)调用parent的原fxn。
Overloading
overriding的优先级(precedence)比overloading高,所以编译器会优先尝试overriding。这意味着如果直接写了不同的参数,可能不会达到期望的效果。
为了overload,我们需要
returnType childClassName::functionName(variableType variableName); returnType childClassName::functionName(variableType1 variableName1,variableType2 variableName2);
这样,上面完成了overriding,下面完成了overloading。
Composition/
composition是指parent class包含了child class,并且如果parent class is destroyed,那么child class is also destroyed。composition的格式是
class parentClassName { childClassName m_childClassName; }
Aggregation/
aggregation是指parent class链接向child class,因此即使parent class is destroyed,child class也不会be destroyed。我们需要用pointer实现这一效果。aggregation的格式是
class parentClassName { childClassName *m_childClassName; }
Polymorphism/多态
Copy Constructor/复制构造函数
这篇关于CS100:C++面向对象学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享