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

点评类网站建设网站搭建公司

点评类网站建设,网站搭建公司,wordpress 百度搜索图片,专门做二手书网站或app1.概念 重载概念#xff1a; C 允许在同一作用域中的某个函数和运算符指定多个定义#xff0c;分别称为函数重载和运算符重载。 运算符重载概念#xff1a;对已有的运算符重新进行定义#xff0c;赋予其另一种功能#xff0c;以适应不同的数据类型 这里主要介绍…1.概念         重载概念 C 允许在同一作用域中的某个函数和运算符指定多个定义分别称为函数重载和运算符重载。 运算符重载概念对已有的运算符重新进行定义赋予其另一种功能以适应不同的数据类型 这里主要介绍一下运算符重载。 重载大部分 C 内置的运算符。这样您就能使用自定义类型的运算符 重载的运算符是带有特殊名称的函数函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样重载运算符有一个返回类型和一个参数列表 大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数那么我们需要为每次操作传递两个参数如下所示 Person operator(const Person p1,const Person p2) 如果是成员函数对象作为参数进行传递对象的属性使用 this 运算符进行访问 //成员函数实现 号运算符重载 Person operator(const Person p) { Person temp; temp.m_A this-m_A p.m_A; temp.m_B this-m_B p.m_B; return temp; } 2.加号运算符重载 作用 实现两个自定义数据类型相加的运算 代码 class Person { public: Person() {}; Person(int a, int b) { this-m_A a; this-m_B b; } //成员函数实现 号运算符重载 Person operator(const Person p) { Person temp; temp.m_A this-m_A p.m_A; temp.m_B this-m_B p.m_B; return temp; } public: int m_A; int m_B; }; //全局函数实现 号运算符重载 //Person operator(const Person p1, const Person p2) { // Person temp(0, 0); // temp.m_A p1.m_A p2.m_A; // temp.m_B p1.m_B p2.m_B; // return temp; //} //运算符重载 可以发生函数重载 Person operator(const Person p2, int val) { Person temp; temp.m_A p2.m_A val; temp.m_B p2.m_B val; return temp; } void test() { Person p1(10, 10); Person p2(20, 20); //成员函数方式 Person p3 p2 p1; //相当于 p2.operaor(p1) cout mA: p3.m_A mB: p3.m_B endl; Person p4 p3 10; //相当于 operator(p3,10) cout mA: p4.m_A mB: p4.m_B endl; } int main() { test(); system(pause); return 0; }总结1对于内置的数据类型的表达式的的运算符是不可能改变的 总结2不要滥用运算符重载 3.左移运算符重载 作用可以输出自定义数据类型 class Person { friend ostream operator(ostream out, Person p); public: Person(int a, int b) { this-m_A a; this-m_B b; } //成员函数 实现不了 p cout 不是我们想要的效果 //void operator(Person p){ //} private: int m_A; int m_B; }; //全局函数实现左移重载 //ostream对象只能有一个 ostream operator(ostream out, Person p) { out a: p.m_A b: p.m_B; return out; } void test() { Person p1(10, 20); cout p1 hello world endl; //链式编程 } int main() { test(); system(pause); return 0; } 总结重载左移运算符配合友元可以实现输出自定义数据类型 4.递增运算符重载 作用 通过重载递增运算符实现自己的整型数据 class MyInteger { friend ostream operator(ostream out, MyInteger myint); public: MyInteger() { m_Num 0; } //前置 MyInteger operator() { //先 m_Num; //再返回 return *this; } //后置 MyInteger operator(int) { //先返回 MyInteger temp *this; //记录当前本身的值然后让本身的值加1但是返回的是以前的 值达到先返回后 m_Num; return temp; } private: int m_Num; }; ostream operator(ostream out, MyInteger myint) { out myint.m_Num; return out; } //前置 先 再返回 void test01() { MyInteger myInt; cout myInt endl; cout myInt endl; } //后置 先返回 再 void test02() { MyInteger myInt; cout myInt endl; cout myInt endl; } int main() { test01(); //test02(); system(pause);return 0; } 总结 前置递增返回引用后置递增返回值 5.赋值运算符重载 c编译器至少给一个类添加4个函数 1. 默认构造函数(无参函数体为空) 2. 默认析构函数(无参函数体为空) 3. 默认拷贝构造函数对属性进行值拷贝 4. 赋值运算符 operator, 对属性进行值拷贝 如果类中有属性指向堆区做赋值操作时也会出现深浅拷贝问题 避免浅拷贝问题 那如果类中有属性需要开辟堆空间如果避免浅拷贝问题呢 1. 需要定义拷贝构造函数和赋值函数 2. 或者就禁用这两个函数用private class Person { public: Person(int age) { //将年龄数据开辟到堆区 m_Age new int(age); } //重载赋值运算符 Person operator(Person p) { if (m_Age ! NULL) { delete m_Age; m_Age NULL; } //编译器提供的代码是浅拷贝 //m_Age p.m_Age; //提供深拷贝 解决浅拷贝的问题 m_Age new int(*p.m_Age); //返回自身 return *this; } ~Person() { if (m_Age ! NULL) { delete m_Age; m_Age NULL; } } //年龄的指针 int *m_Age; }; void test01() { Person p1(18); Person p2(20); Person p3(30); p3 p2 p1; //赋值操作 cout p1的年龄为 *p1.m_Age endl; cout p2的年龄为 *p2.m_Age endl; cout p3的年龄为 *p3.m_Age endl; } int main() { test01(); //int a 10; //int b 20; //int c 30; //c b a; //cout a a endl; //cout b b endl; //cout c c endl; system(pause); return 0; } 6.关系运算符重载 作用 重载关系运算符可以让两个自定义类型对象进行对比操作 代码 #include iostream #include string using namespace std; class Person {public:Person(const string name, int age){this-m_Name name;this-m_Age age;};bool operator(const Person p){return (this-m_Name p.m_Name this-m_Age p.m_Age);}bool operator!(const Person p){return !(this-m_Name p.m_Name this-m_Age p.m_Age);}private:string m_Name;int m_Age; }; void test01() {Person a(孙悟空, 18);Person b(孙悟空, 18);if (a b){cout a和b相等 endl;}else{cout a和b不相等 endl;}if (a ! b){cout a和b不相等 endl;}else{cout a和b相等 endl;} } int main() {test01();// system(pause);getchar();return 0; } 7.函数调用运算符重载 函数调用运算符 () 也可以重载由于重载后使用的方式非常像函数的调用因此称为仿函数仿函数没有固定写法非常灵活 class MyPrint {public:void operator()(string text){cout text endl;} }; void test01() {//重载的操作符 也称为仿函数MyPrint myFunc;myFunc(hello world); } class MyAdd {public:int operator()(int v1, int v2){return v1 v2;} }; void test02() {MyAdd add;int ret add(10, 10);cout ret ret endl;//匿名对象调用cout MyAdd()(100,100) MyAdd()(100, 100) endl; } int main() {test01();test02();system(pause);return 0; }
http://www.sczhlp.com/news/203713/

相关文章:

  • springboot结合阿里巴巴easyexcel,实现一键导出数据到Excel中
  • 图论初步 - L
  • CSP-S2 历年真题 - L
  • 成都的网站建设公司哪家好苏州模板建站定制
  • 做网站后期维护系统显示没有安装wordpress
  • 服务器 网站打开慢哈尔滨百度搜索排名优化
  • 大连网站设计公司东莞微信小程序开发公司
  • 工商局网站实名认证怎么做建站用什么代码最好
  • 网站开发要学什么语言最好用的短链接生成器
  • 网站里面送礼物要钱怎么做代码区块链app开发
  • wordpress 开发者模式福州seo公司
  • 注册域名之后如何做网站淘宝网站怎样建
  • 蓝色网站导航网站如何做微信支付宝支付宝支付宝
  • html5 网站建设网站上传可以通过
  • 天津市网站建设+网页制作让蜘蛛不抓取网站的文件夹
  • 什么人最需要建设网站快速优化seo
  • 东台建设企业网站上海市房地产官网
  • 上海松江做网站宁波seo网络推广主要作用
  • 网站logo是指建立网站的作用
  • 成安专业做网站广告设计是干嘛的
  • 做设计网站模块的网站新媒体营销实训报告总结
  • 网站设计建设企业标准网站建设多少钱
  • 网站建设费属于宣传费吗吉林省建设厅网站专家
  • 上饶网站制作需要多少钱网站建设 部署与发布试题
  • 西渡网站建设以下哪个域名是做游戏网站的
  • 模板网站建设开发如何 做网站跳转
  • 哈尔滨可以做网站的公司个人博客平台登录
  • 网站建设 网页设计wordpress用户推广
  • 商务网站建设与维护试卷sns社交网站建设
  • 自己怎么注册网站软件开发就业前景走向