首页 > 编程语言 >算法学习笔记_2

算法学习笔记_2

时间:2023-11-30 11:57:39浏览次数:49  
标签:函数 int void 笔记 学习 算法 析构 class 构造函数

2023.5

面向对象C++ : 函数

1. 缺省值

(1)函数调用时,如果一个参数使用了缺省值,那么后面的所有参数都要使用缺省值。

(2)参数的缺省值在函数声明中指定,而不是在函数定义中指定。在一个文件中,一个参数只能被指定一次缺省值。

print ( x );    // 等价于print ( x, 10)
print ( x, 2 );    //以二进制格式输出x
//print(x1,x2) 中的x2是缺省参数
2.重载函数

(1)两个函数的名字相同,并且在相同的作用域中声明,但是参数表不同,则它们是重载函数。(返回值类型相同)

3.链接指示符 extern

(1)如果程序员希望在C++程序中调用C语言写的函数,这时可以使用链接指示符。

(2)链接指示符不能出现在函数体中,一般放在头文件中比较合适。

//单一语句的链接指示符
  extern "C" void foo( int );
//复合语句形式的链接指示符
  extern "C" {
    int printf(const char*,…);
    int scanf(const char*,…);
  }

(3)关键字extern用来声明全局对象。extern声明不会引起内存分配,它可以在同一文件中或同一程序的不同文件中多次出现。

面向对象C++ :类和对象

1.this 指针

(1)区分与局部变量重名的数据成员

(2)返回当前对象

(3)在成员函数中获取当前对象地址

PS : 静态成员函数(static)没有this指针,只能访问静态成员。

class X {
    int m;
public:
    void setVal(int m) { 
      this -> m = m; //区分与函数参数重名的数据成员
    }
    X& add(const X& a)  { 
      m += a.m;
      return *this;     //返回当前对象
    }
    void copy(const X& a) { //拷贝对象
      if (this == &a)//如果是同一对象则无需拷贝
        return;
      m = a.m;     //拷贝操作
    }
};
2.类的友元

(1)在声明友元时要遵循一条规则:友元必须在被访问的类中声明。

//向前声明,声明X是一个类,其完整定义在其他地方
class X;
class Y {
  public:
  //对这个函数声明而言,只需要知道X是一个类型就足够
  void f(X*);    
};
class X { // X的完整声明和定义
  int i;
public:
  void initialize();
  friend void g(X*, int); // 全局函数友元
  friend void Y::f(X*);  // 成员函数友元
  friend class Z;//友元类,Z的所有成员函数都是X的友元
  friend void h();
};
3.构造函数 缺省构造函数

(1)构造函数的名字和类名字相同,无返回类型

(2)可以重载,构造函数的形式决定了初始化对象的方式

(3)explicit 关键字在构造函数声明前加上禁止隐式转换

(4)拷贝构造函数……(没搞懂)

class X {
int m,n ;
public:
  X() { m = 0; n = 0;}    //缺省构造函数
  X(int v) { m = v; n = 0; }    //构造函数
  X(int v1, int v2) { m = v1; n = v2; }//构造函数
  explicit X(int v): m(v) {} 
  //只是普通构造函数,不能在需要类型转换时隐式调用
   //其他成员……
};
class Y {
  int m,n ;
public:
  //这也是缺省构造函数的一种形式
  Y(int v1 = 0, int v2 = 0) { m = v1; n = v2; }
  //Y可以通过三种方式调用:Y(),Y(int),Y(int,int)
  //其他成员……
};    
4.析构函数

(1)析构函数负责在对象生存期结束时返回相关资源和自动释放资源。当对象离开作用域时,或者用 delete 释放堆上的对象时,析构函数会被自动调用。

(2)析构函数的名字是类名字前加波浪线“~”。析构函数没有返回类型,也没有任何参数。析构函数不能重载。

class Vect {
    int n;
    int* p;
  public:
    Vect(int sz) {
      assert(sz>0);//检查sz是否大于0,否则终止
      n = sz;
      p = new int[n];
    }
   ~Vect(){ delete []p; }//析构函数
   …
  };
5.定义指向成员的指针

(1)成员类型 类名 X :: *指向成员的指针;

int X::*p;

标签:函数,int,void,笔记,学习,算法,析构,class,构造函数
From: https://www.cnblogs.com/robber-is-best/p/17866966.html

相关文章

  • 算法学习笔记_1
    23.41.一个C++输入时加速的好办法。#includeusingnamespacestd;intmain(){std::ios::sync_with_stdio(false);cin.tie(0);return0;}ios::sync_with_stdio(false)是C++中的语句,用于关闭与stdio的同步。这样做可以提高输入输出效率。2.杂七杂八忙于计设三创,几......
  • 学习笔记12
    MySQL数据库系统笔记1.概述MySQL是一种关系型数据库管理系统,广泛用于Web应用程序的后台数据存储。它是一个开源的数据库系统,提供高性能、稳定可靠的数据存储和管理功能。2.安装和配置2.1安装MySQL安装MySQL的步骤如下:下载适合操作系统的MySQL安装包。运行安装程序并按......
  • 前端学习笔记1
    前端笔记2023.31.<meta>标记链接常用meta整理|菜鸟教程(runoob.com)主要用于提供HTML文档的元数据,用于不同移动设备页面调整(全屏、识别邮箱电话号码、添加广告)、SEO优化(搜索引擎优化)、页面相关(编码、站点适配)……2.urlhrefsrc解释(1)URL:统一资源定位符(Uniform......
  • 面向对象C++学习总结
    洛谷日记32023.5面向对象C++:运算符重载1.运算符重载(1)n定义重载运算符和定义普通函数类似,只是该函数的名字是operator@,@表示要重载的运算符。MinIntoperator-()const{//一元运算"-"cout<<"MinInt::operator-"<<endl;returnMinInt(-b);}//定义MinInt类的一......
  • 数字图像处理八九章学习总结
    数字图像处理8.数字形态学图像处理8.1背景&基础(1)基本思想:选择具有一定尺寸和形状的结构元素度量,并提取其相关形状结构图像分量,以达到对图像分析和识别的目的。(2)并集A∪B、交集A∩B、补集Ac、差集A-B、映射、平移(A)z(3)结构元素:一个由0值和1值组成的矩阵。每个......
  • 查找算法
    查找1.二分查找二分查找的思路分析有序序列1.首先确定该数组的中间的下标mid=(left+right)/22.然后让需要查找的数findval和arr[mid]比较2.1findval>arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找2.2findval<arr[mid],说明你要查找的数在mid的左边,......
  • FPGA入门笔记007_A——按键消抖模块设计与验证(状态机、$random、仿真模型、task语法)
    实验现象:每次按下按键0,4个LED显示状态以二进制加法格式加1。每次按下按键1,4个LED显示状态以二进制加法格式减1。知识点:1、testbench中随机数发生函数$random的使用;2、仿真模型的概念1、按键波形分析:按键未按,FPGA管脚检测到高电平。按键按下,FPGA管脚检测到低电平。2、设......
  • 考研数学笔记:无穷大量怎么比较?
    一个常用的无穷大量的比较公式函数在其定义域端点处有界或无界其实就是在该点处有极限或者没极限的问题千万别绕进去:自己复合自己的复合函数一个函数既是奇函数又是周期函数,可能会有什么样的性质?......
  • Java学习之路(八)
    Java学习之路(八)1、案例驱动模式1.1、案例驱动模式概述(理解)通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题1.2、案例驱动模式的好处(理解)解决重复代码过多的冗余,提高代码的复用性解决业务逻辑聚集紧密导致的可读性......
  • 《clean code》读书笔记二
    《代码整洁之道》主要讲述了一系列行之有效的整洁代码操作实践。软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。这本书的阅读对象为一切有志于改善代码质量的程序员,书中介绍的规则均来自作者Bob大叔多年的实践......