本篇主要记录侯捷老师讲的C++ 面向对象高级编程课程1-5节的学习笔记和心得。
- C++历史:起源于1983年,当时不叫C++,名字为C with class.
- C++ 是第一个面向对象语言,也是效率方便比较高的语言,后面的Java C# 都属于面向对象语言
- 所谓的面向对象的意思就是不同于C语言的过程语言,C++将数据和方法进行整合在一起,组装成一个新的东西,这个新的东西就是Class.使用这个类可以去创建对象,使用类中的方法可以 *** 作这个对象,这就是所谓的面向对象的思想。
- 目前最新的C++的版本为C++ 11,但是大部分人还是习惯在使用C++ 98这个版本。
- 推荐阅读的C++书籍,C++ Primer是第一个设计C++编译器的人写的,另外一个是创建C++语言的人写的。
- C++的类分为两种形式,一种是带指针类型的,另外一种是不带指针类型的。
- 代码形式为由.h和.cpp两种文件组成,.h为头文件,头文件的类型分为两种,一种是自己写的,另外一种是标准库,如果.cpp文件要使用头文件,则需要引用,注意在这里对于自定义头文件以及标准库头文件引用方式不同,如下:
#include "complex.h" //自定义头文件引用
#include //标准库头文件引用
区别就是一个使用引号,一个使用尖括号,文件名的.h后缀可以去掉。
- 对于自己定义的头文件,请严格按照以下格式
#ifndef _COMPLEX_
#define _COMPLEX_
/* Code */
#endif
这种格式的好处就是如果多个文件都引用一个头文件,则该头文件只会定义一次,避免了重复的代码段。
- 一类分为两个部分,分别为body和head,类的定义以及声明都是在头文件中完成的,具体一个类可以分为以下几个部分
#ifndef _COMPLEX_
#define _COMPLEX_
#include
/* 第一部分:前置声明区 */
class ostream;
template //如果不确定变量的特性可以使用模板的概念
...
/* 第二部分:类声明 */
class complex{ // class head: complex
//body
public:
/* code */
...
private:
/* code */
...
friend /* code */
}
/* 第三部分:类的定义 */
complex :: function ...
#endif
body里面又可以分为三个部分,一个是Public公共也就是可以让外界访问,即对象使用的一些方法;另外一个是Private私有部分只有这个类中的成员可以访问,一般里面放的是数据;最后一部分为friend部分,它的特性就是可以访问Private。
- 构造函数具有的几个特性
- 构造函数的名称需要和类的名称相同
- 在对象声明时可以传入参数,如果没有传入参数,则使用构造函数的默认值
- 无任何的返回类型
- 要使用Initialization list的功能去对变量进行赋值
- 构造函数可以有多个重载,编译器编译时会将输入值一同和函数名称编译,其区分重载函数
class complex{
public:
complex (double r=0,double i=0)
: re(r),im(i) //re im 为初始化的私有变量
{}
}
- const 字符的含义就是不改变传入的数据数值,如果前面加上const字符,则该函数不可以更改变量,这个的使用要根据具体的情况而来。
- 参数传入的两种形式:pass by value vs pass by reference
- 传入的数据reference的形式为 加上&符号
- 如果可以,尽量使用reference传递数值,因为reference相当于C语言中的指针,传递数值的速度快。
- value适合于local var或者临时变量的这种情况。
- 参数值返回的两种形式和输入形式相同
complex& operator +=(const complex&); //reference形式的传入和返回
- 相同class的objects互为友元函数
- *** 作符重载
- 成员函数会有一个默认的this,不是成员函数没有this
- 传递者不需要知道接收者是怎么接受的
- 所谓的 *** 作符重载就是对已知的符号根据自身类的特性进行特殊话,例如输出复数的《,以及复数的±
// *** 作符重载的例子
inline complex
operator + (const complex& x, const complex& y)
{
return complex (real (x) + real (y),
imag (x) + imag (y));
}
x& x, const complex& y)
{
return complex (real (x) + real (y),
imag (x) + imag (y));
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)