C++学习笔记11:面向对象高级编程(1-5)

C++学习笔记11:面向对象高级编程(1-5),第1张

本篇主要记录侯捷老师讲的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。


  • 构造函数具有的几个特性
  1. 构造函数的名称需要和类的名称相同
  2. 在对象声明时可以传入参数,如果没有传入参数,则使用构造函数的默认值
  3. 无任何的返回类型
  4. 要使用Initialization list的功能去对变量进行赋值
  5. 构造函数可以有多个重载,编译器编译时会将输入值一同和函数名称编译,其区分重载函数
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
  1. 传入的数据reference的形式为 加上&符号
  2. 如果可以,尽量使用reference传递数值,因为reference相当于C语言中的指针,传递数值的速度快。


  3. value适合于local var或者临时变量的这种情况。


  • 参数值返回的两种形式和输入形式相同
complex& operator +=(const complex&); //reference形式的传入和返回
  • 相同class的objects互为友元函数
  • *** 作符重载
  1. 成员函数会有一个默认的this,不是成员函数没有this
  2. 传递者不需要知道接收者是怎么接受的
  3. 所谓的 *** 作符重载就是对已知的符号根据自身类的特性进行特殊话,例如输出复数的《,以及复数的±
// *** 作符重载的例子
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));
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存