十、操作符重载

原创 2017年01月03日 01:24:12

一、使用c++标准库
c++标准库并不是c++语言的一部分
c++标准库是由c++语言编写而成的类库和函数的集合
c++标准库定义的类和对象都位于std的命名空间里
c++标准库的头文件都不带.h后缀
c++标准库涵盖了c库的功能
c库中

#include<cstdio>
using namespace std;
int main()
{
    printf("helloworld\n");
    printf("press any key to continu....");
    getchar();
    return 0;
}

c++标准库里的输入输出的类:
输出:cout(c++标准库里的显示器对象)
输入:cin(c++标准库里的键盘对象)

#include <iostream>//c++的输入输出标准库
using namespace std;
int main()
{
    cout<<"Hello World"<<endl;//endl作用是换行cout<<"Hello"<<endl<<" World"输出hello空一行在输出world
    int x;
    int y;
    cout<<"1st Parameter: ";
    cin>>x;//将键盘的输入右移到x中
    cout<<"2nd Parameter: ";
    cin>>y;//将键盘中的值也移到y中
    cout<<"Result: "<<x+y<<endl;//输出x+y的值
    return 0;
}

左移和右移在c语言中只能用于整数,并且语义是确定不变的
二、操作符重载
操作符重载为操作符提供不同的语义

#include <cstdlib>
#include <iostream>
using namespace std;
struct Complex
{
    int a;
    int b;
};
int main(int argc, char *argv[])
{
    Complex c1 = {1, 2};
    Complex c2 = {3, 4};
    Complex c3 = c1 + c2;//出现错误,结构体不能相加

    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}

解决方法1:利用引用来求

#include<iostream>
#include<cstdlib>
using namespace std;
struct complax
{
    int a;
    int b;
};
complax add(const complax& a1, const complax a2)
{
    complax ret;
    ret.a = a1.a + a2.a;
    ret.b = a1.b + a2.b;
    return ret;
}
int main()
{
    complax t1 = {1, 3};
    complax t2 = {2, 5};
    complax t3;
    t3 = add(t1, t2);
    cout<<t3.a<<endl;
    cout<<t3.b<<endl;
    cin.get();
    return EXIT_SUCCESS;
}

add函数虽然可以解决complex变量相加的问题,但是complex在现实世界中是确实存在的复数,
并且复数在数学中的地位和普通的实数相同,那为什么不能让加操作符也支持复数相加呢

c++操作符重载的本质:
c++中通过operator关键字可以利用函数扩展操作符
operator的本质是通过函数重载实现操作符重载
如将上面的:
Complex add(const Complex& c1, const Complex& c2)//用引用
改成
Complex operator+ (const Complex& c1, const Complex& c2)//用引用

Complex c3 = add(c1, c2);
改成
Complex c3 = c1+c2;

用operator关键字扩展的操作符可以用于类吗?
三、c++中的友元:
private声明使得类的成员不能被外界访问
但是通过friend关键字可以例外的开发权限

include

include

using namespace std;

class Complex
{
int a;
int b;
public:
Complex(int a = 0, int b = 0)
{
this->a = a;//记得普通成员函数有一个指向类的指针
this->b = b;
}

int getA()
{
    return a;
}

int getB()
{
    return b;
}

friend Complex operator+ (const Complex& c1, const Complex& c2);//好朋友之间就没有什么秘密了

};

Complex operator+ (const Complex& c1, const Complex& c2)
{
Complex ret;

ret.a = c1.a + c2.a;
ret.b = c1.b + c2.b;

return ret;

}

int main(int argc, char *argv[])
{
Complex c1(1, 2);
Complex c2(3, 4);
Complex c3 = c1 + c2;
//main表示complex的朋友,输出也会有问题
cout << “Press the enter key to continue …”;
cin.get();
return EXIT_SUCCESS;
}

解决方法:
重载的左移运算符:
ostream& operator<< (ostream& out, const Complex& c)//返回值按照c++库里的重载
{
out<

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 操作符重载

C++操作符重载专题

  • 2012-04-15 08:16
  • 181KB
  • 下载

c++操作符重载

c++操作符重载规则 操作符重载规则

【C++第八课】---操作符重载上

一、关于C和C++标准库的使用 我们都知道C++为了向下兼容C,和多库都是基于C来开发的,那么对于C++的库的使用需要注意什么地方呢? 1、C++标准库并不是C++语言的一部分 2、C++ 标准库是...

操作符重载

  • 2012-11-01 13:02
  • 756B
  • 下载

C++主要操作符重载的定义和总结

一、输出操作符的重载     ostream& operator    {os     return os;}    为了与IO标准库一致,操作符应接受ostream&am...
  • lzkIT
  • lzkIT
  • 2012-07-15 23:27
  • 4594

c++操作符重载

  • 2011-11-01 23:18
  • 216KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)