当前位置: 首页 > wzjs >正文

泰安网站建设优化江苏seo技术教程

泰安网站建设优化,江苏seo技术教程,一级a做爰片免费网站国语,网站设计做啥好这段代码中我们可以看到同样是运算符&#xff0c;它的作用是不同的aa<<3;是c内置的移位运算符。 cout<<"hello world"中<<它的作用是插入运算符。将字符串传递给cout对象&#xff0c;从而将字符输出到终端上。这种功能是如何实现的&#xff1f;其…

这段代码中我们可以看到同样是运算符,它的作用是不同的a=a<<3;是c++内置的移位运算符。

cout<<"hello world"中<<它的作用是插入运算符。将字符串传递给cout对象,从而将字符输出到终端上。这种功能是如何实现的?其实就是将运算符作为一个函数,对函数进行重载。

#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int>numbers{ 1,2,3,5,7,9 };cout << numbers << endl;int a = 3;a = a << 3;
}

编译错误
error C2679: 二元“<<”: 没有找到接受“std::vector<int,std::allocator<int>>”类型的右操作数的运算符(或没有可接受的转换)

其实就是找不到对应参数类型的重载函数。为了让上述代码工作,我们需要重写一个重载函数,用来实现整形向量传递给字符串输出对象。

下面实现对整形向量的重载代码

#include<iostream>
#include<vector>
using namespace std;ostream& operator<<(ostream& o, const vector<int>& numbers)
{o << "[";unsigned int last = numbers.size();for (int i = 0; i < last; i++){o << numbers[i];if (i != last - 1)o << ",";}o << "]";return o;
}
int main()
{vector<int>numbers{ 1,2,3,5,7,9 };cout << numbers << endl;int a = 3;a = a << 3;
}

打印结果 

 

上面是类外非成员函数进行重载。也可以对类内成员函数进行重载。

下面是同样两个类型的对象相加,并输出结果

#include<iostream>
#include<vector>
using namespace std;//ostream& operator<<(ostream& o, const vector<int>& numbers)
//{
//	o << "[";
//	unsigned int last = numbers.size();
//	for (int i = 0; i < last; i++)
//	{
//		o << numbers[i];
//		if (i != last - 1)
//			o << ",";
//	}
//	o << "]";
//	return o;
//}
//int main()
//{
//	vector<int>numbers{ 1,2,3,5,7,9 };
//	cout << numbers << endl;
//	int a = 3;
//	a = a << 3;
//}class Complex {
private:float r;float i;
public:Complex(float real, float imaginary) :r(real), i(imaginary) {};Complex operator+(const Complex& other)const {return Complex(this->r + other.r, this->i+other.i);}friend ostream& operator<<(ostream &o, const Complex& a){o <<"r:"<<a.r<<" "<<"i:"<<a.i;return o;}
};int main()
{Complex a(0.1, 2);Complex b(0.4,-2.1);Complex c = a + b;cout << c;return 0;
}

 自增运算符重载过程

class ExampleClass
{
private:int m_a;//前缀增量运算符ExampleClass& operator++(){m_a++;return *this;}//后缀增量运算符ExampleClass operator++(int){ExampleClass temp = *this;operator++();return temp;}
};

 函数调用运算符,我们定义一个一次函数表达式

struct LinearFuction {double k;double b;double operator()(double x)const {return k * x + b;}};
int main()
{LinearFuction f{ 1.5,3 };cout << "f(0)=" << f(0) << endl;cout << "f(3)=" << f(3) << endl;
}

间接引用运算符(->),它的返回值必须是一个指针或者一个对象或者对象的引用,并且这个对象的间接引用也被重载了。

struct Complex {float r, i;
};
class LocalPtr {
private:Complex* m_ptr;
public:LocalPtr(Complex* p) :m_ptr(p) {}Complex* operator->() { return m_ptr; }~LocalPtr() {if (m_ptr)delete m_ptr;}LocalPtr(const LocalPtr&) = delete;LocalPtr& operator=(const LocalPtr&) = delete;
};
int main()
{LocalPtr pComplex1(new Complex{ 0.1,0.5 });pComplex1->i++;
}

 我们常用的智能指针就是重载间接引用运算符来实现的

我们定义一个Complex结构,用于表示复数。接着我们定义一个名叫LocalPtr的类,它是一个简单的指针包装类,它定义了一个指向Complex类的指针。重载了一个间接引用运算符(->),它返回指向Complex结构的指针。在主函数中可以直接访问m_ptr所指向的结构体中成员。类对象销毁时调用析构函数。释放m_ptr缩指向的内存 。为了防止多个对象m_ptr成员指向同一地址。并在析构函数中释放同一块内存。localPtr删除了拷贝构造函数和赋值运算符。

下彪运算符,重载后可以让对象向数组一样访问元素。

代码如下

class Array 
{
private:vector<float>number;
public:Array(vector<float>n) :number(n) {};float operator[](int i){int size = number.size();if (i < 0)return number[size + i];return number[i];}
};
int main()
{Array arr(vector<float>{1,2,3,4,5,6,7,8,9});cout << arr[1]<<endl;cout << arr[-1] << endl;
}
http://www.dtcms.com/wzjs/361216.html

相关文章:

  • 北京seo外包平台班级优化大师头像
  • 建站服务外贸网络营销广告
  • 2014网站设计关键词调词平台费用
  • 常见的网址有哪些杭州seo网站推广
  • 沈阳做网站好的常用的seo工具
  • unity3d转行网站开发站长工具怎么关掉
  • 学网站开发需要多久优化关键词的方法
  • 网站建设营销外包公司哪家好关键词优化排名用哪些软件比较好
  • 吉林市一建公司官网广州seo技术外包公司
  • wordpress英文建站湖南长沙最新情况
  • 鞋材东莞网站建设百度搜索网页版
  • 一级a做爰片免费网站无毒广东seo推广
  • 怎样做社交网站廊坊快速排名优化
  • 网站一级目录企业建站模板
  • 网站公司利润2023年的新闻十条
  • 做租赁的行业网站长沙网络营销咨询费用
  • 做网站有那几种末班seo平台代理
  • 深圳布吉建网站公司引擎优化
  • 泰州网站建设定制百度搜索一下
  • 企业网站建立策划书中国最近新闻大事件
  • 深圳响应式网站开发北京网络营销推广公司
  • 濮阳网站建设电话百度搜索优化建议
  • 做网站应该用什么镜像襄阳seo培训
  • 室内设计效果图怎么做出来的seo中国
  • 汉口网站建设 优帮云网站推广与优化平台
  • 棋牌游戏网站建设太原做网站推广的公司
  • 互联网培训机构有哪些搜索引擎简称seo
  • wordpress调用指定文章id搜狗seo培训
  • 廊坊网站制作网站seo优化工程师
  • 代理网站系统百度问一问免费咨询