c++综述

      C语言作为结构化和模块化语言能够得心应手的处理小规模的程序,但是当一个问题需要高度抽象和建模时,C语言便力不从心,c++语言便在贝尔实验室被bs博士创造出来,其最初的名字为 c with class ,后来更名为c++,其含义为在完全兼容c的基础上,扩展了c的语法,增加了面向对象的特性,加入了STL 等。

    1 c++ 对C 的扩展

    1.1 类型检查更加严格

    const 常量在c 语言中可通过指针对其修改,在C语言中人们称const 不是真正的常量,而是一个只读变量,但在c++中常量变成了真正的常量,例:

             const int  a = 10;
             int* pa = &a;
在c++编译环境中,会提示 初始化”: 无法从“const int *”转换为“int *” 的 错误。

1.2 布尔类型

c++中加入了真正的 bool 类型, 其值为 true 或者 false

1.3 枚举类型

在C语言中枚举本质是一个整形,而在c++中则变成可真正的枚举, 定义的枚举变量只能用枚举中的元素初始化

1.4 cin cout 流对象

cin cout 的格式化控制 ----- 需要加入头文件 #include <iomanip>

setprecision(n) 用于设置有效位数

setw(n) 用于设置域宽

setfill(“char”) 设置 填充字符

setiosflags(ios::left) 左对齐 setiosflags(ios::right) 右对齐

1.4 函数重载

前期对此知识点有过接触,这里简单重温一下

重载规则:函数名相同, 参数个数、 类型、参数顺序不同可构成重载,注意 返回类型不能决定重载

函数重载匹配的规则:严格按照参数匹配,有则调用。参数的隐式转换也可以寻求重载 匹配但有时会引发重载的二义性 ambiguous 例如 int对于 long double两种函数入参

类型,则会编译出现二意性错误。

重载的底层实现: 底层采用 倾轧(name manling)的技术,相同函数名但不同的入参其在底层函数名并不相同。由于c++ 完全兼容c 语言,可以使用extern "C" 的方法,

在源文件和头文件避免函数被倾轧,使得c++代码兼容C语言风格。

1.5 操作符重载(operator overload)

c++中认为 操作符便是函数,函数便可以重载,(其实c++中并不是所有的操作符都可以重载),我们看一个经典的例子:

	Complex operator+(Complex a, Complex b)
	{
		Complex ret;
		ret.real = a.real + b.real;
		ret.image = a.image + b.image;

		return ret;
	}

    此函数便实现了 + 操作符 在复数运算中的重载;在 计算 Complex 类型变量的加法时便可以直接使用 + 操作符;

    1.6 c++中的默认参数

    默认参数一般在声明处使用就可以,默认参数的使用规则:

    默认参数在函数参数列表中要从右到左使用,不可以跳跃。

    默认参数函数不可以和函数重载同时使用,否则容易引发二义性错误

    1.7 c++中的引用

    c++ 中引入了应用的概念,其为变量的别名,在使用时不会开辟内存空间,即本质是一个声明。关于应用这里有几点需要说明:

         1 引用不会占用内存,其地址与其引用的变量有相同的地址,且类型与原变量类型保持一致。

          2 引用在声明的同时必须初始化,且一经初始化便不可更改。可以对引用再次引用,使一个变量能够具有多个别名。例:

	int a = 10;
	int& ra = a;
	int& raa = ra;

         3  引用多用在 函数的形参中,这样可以代替原来C语言中的 指针形参。 在这里 引用的本质是指针,是对裸露的内存地址做了一次包装,所以这里如果在对引用取地址就变得没有意义,违背了程序设计者的初衷。所以这里便又得出了一个使用规则,这里作为第四条总结一下。

        4 可以定义指针的引用但不可以定义引用的指针。这里还有一个变体规则,可以定义数组的引用,但不可以定义引用的数组。例如

	int arr[2] = {0,1};
	int (&rarr)[2] = arr;
这样来声明一个数组的引用是没有问题的,但是下面

      int & rarr[2] = {0,1};
这样来声明引用的数组是非法的,其本质,是使用的引用的引用。ps 数组可以看作一个指针。

     最后总结一下,说一千道一万,引用和指针有一个很大的区别,指针的指针合法,引用的引用非法。


模板匹配是一种常见的计算机视觉技术,用于在图像中寻找特定的模式或目标。它的原理是将一个预先定义好的模板与图像进行比对,以找到最匹配的位置。 模板匹配的过程主要包括以下几个步骤。首先,选择一个模板,模板可以是一个小的图像区域,也可以是一个简单的形状或特征。然后,将模板与图像中的每个位置进行比对。比对的方法可以是逐像素比较,也可以使用更复杂的特征匹配方法。根据比对结果,可以计算匹配度或相似度的度量指标。最后,根据度量指标选择最匹配的位置或目标。 模板匹配具有一些优点。首先,它是一种简单直观的方法,易于理解和实现。其次,它适用于不同类型的图像,包括灰度图像、彩色图像和二值图像。此外,模板匹配也具有一定的鲁棒性,对一定程度的噪声和变形具有一定的容忍性。 然而,模板匹配也有一些局限性。首先,它对于光照和视角等因素比较敏感,如果图像发生较大变化,可能会导致匹配失败。其次,当目标的外观变化较大或存在相似的背景时,模板匹配可能会产生误匹配。此外,由于计算复杂度的限制,模板匹配在大规模图像搜索中可能会受到限制。 综上所述,模板匹配是一种常用的计算机视觉技术,通过比对模板与图像中的位置来寻找目标或模式。它具有简单、直观、适用于不同类型图像的优点,但也存在对光照、视角变化敏感、容易产生误匹配和计算复杂度限制等局限性。在实际应用中,需要根据具体情况选择合适的匹配方法和技术来提高匹配的准确性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值