c++训练营--重载

// demo1.cpp :
定义控制台应用程序的入口点。
//通过此例程了解重载

#include "stdafx.h"
#include
<iostream>
using namespace std;
 

class CMath
{
public:

  CMath(float a):m_a(a)
  {

 }
  ~CMath()

  {

 }
  double Add(double
a,double b);
  double Sub(double a,double b);
  double
Mul(double a,double b);
  double Div(double a,double b);
  int
Add(int a,int b)
  {
   return a+b;
  }

  int Sub(int a,int b)
  {
   return a-b;

  }
  int Mul(int a,int b)
  {
   return
a*b;
  }
  int Div(int a,int b)
  {
   if
(b!=0)
   {
    return a/b;
   }

   return 0;
  }
public:
  CMath operator
+(CMath& mymath)
  {
   CMath result(0);

   result.m_a=m_a+mymath.m_a;

  return result;

  }
  CMath operator -(CMath& mymath)
  {

   CMath result(0);

   result.m_a=m_a-mymath.m_a;

  return result;

  }
  CMath operator *(CMath& mymath)
  {

   CMath result(0);

   result.m_a=m_a*mymath.m_a;

  return result;

  }
  CMath operator /(CMath& mymath)
  {

   if (mymath.m_a==0)
   {

    mymath.m_a=1;
   }
   CMath
result(0);
   result.m_a=m_a/mymath.m_a;

  return result;

  }
  CMath operator ++()//前++
  {

  this->m_a+=1;
   return *this;
  }

  CMath operator ++(int)//后++,加上參数int,无意义
  {
  CMath
*t=this;
   ++(t->m_a);
   return
*t;

 }
  CMath operator
--()//前--
  {
  this->m_a-=1;
   return
*this;

 }
  CMath operator
--(int)//后--,加上參数int,无意义
  {
  CMath *t=this;

  --(this->m_a);
   return *t;

 }
  CMath operator
+=(CMath & mymath)
  {
   m_a+=mymath.m_a;

   return *this;

 }
  CMath operator
-=(CMath & mymath)
  {
   m_a-=mymath.m_a;

   return *this;

 }
  bool operator
==(CMath &mymath)
  {
   return (m_a==mymath.m_a);

  }
  friend ostream& operator <<(ostream &os,CMath
&t);//必须是友元
 
 
 friend iostream& operator
>>(iostream &is,CMath &t);//必须是友元
 
 

 CMath operator ()(const CMath& t)
  {
   return
CMath(this->m_a=t.m_a);
  }
  CMath& operator =(CMath
&t)
  {
   this->m_a=t.m_a;
   return
*this;
  }
private:
  float m_a;
};

 

ostream& operator <<(ostream &os,CMath &t)
{

  os<<t.m_a<<endl;
  return os;
}

iostream& operator
>>(iostream &is,CMath &t)
{
  is>>t.m_a;

  return is;
}
 
double CMath::Add(double a,double b)

{
  return a+b;
}
 
double CMath::Sub(double a,double
b)
{
  return a-b;
}
 
double CMath::Mul(double
a,double b)
{
  return a*b;
}
 
double
CMath::Div(double a,double b)
{
  if (b==0)
  {

   b=1;
  }
  return a/b;
}

int _tmain(int argc, _TCHAR*
argv[])
{

 CMath mymath(4);

  cout<<mymath.Add(1.1,2.1)<<endl;//调用參数为double类型的Add函数

 cout<<mymath.Add(1,2)<<endl;//调用參数为int类型的Add函数

 cout<<mymath.Sub(1,2)<<endl;//

  cout<<mymath.Mul(1,2)<<endl;

  cout<<mymath.Div(1.3,2.3)<<endl;

 cout<<endl<<endl;

  cout<<"mymath:"<<mymath<<endl;
  mymath++;

  cout<<"mymath++:"<<mymath<<endl;

  mymath--;
 cout<<"mymath--:"<<mymath<<endl;

  cout<<"mymath+mymath:"<<mymath+mymath<<endl;

  cout<<"mymath*mymath:"<<mymath*mymath<<endl;

  cout<<"mymath/mymath:"<<mymath/mymath<<endl;

 CMath mymath1(20);

  mymath=mymath1;

  cout<<"mymath=mymath1:"<<mymath<<endl;

 if (mymath==mymath1)

  {
   cout<<"mymath==mymath1"<<endl;

  }

 mymath1+=mymath;

  cout<<"mymath1:"<<mymath1<<endl;

 mymath1-=mymath;

  cout<<"mymath1:"<<mymath1<<endl;

 mymath--;

 mymath1(mymath);

  cout<<"mymath1(mymath):"<<mymath1<<endl;

 
  return 0;

}

 

c++训练营--重载,布布扣,bubuko.com

时间: 2024-10-14 01:43:03

c++训练营--重载的相关文章

【好程序员训练营】---- 重载、构造函数和this、static要点

android培训------我的java笔记,期待与您交流! 一.重载函数 类中多个同名的方法名 靠参数来区分 class Person{ int age; String name; void set(int a){ age = a; } void set(String s){ name = s; } } 二.构造函数 没有返回值 每个类都有构造函数,若没有写,编译器会自动添加 如果类中写有其他有参构造函数而又没有写默认构造函数,这时new无参构造函数则会出错,因为编译器不会自动添加默认构造函

好程序员训练营-Java方法重载

<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流! 在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading). 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 重载是面向对象的一个基

c++训练营

// demo1.cpp : 定义控制台应用程序的入口点.//通过此例程了解重载 #include "stdafx.h"#include <iostream>using namespace std;  class CMath{public: CMath(float a):m_a(a) {  } ~CMath() {  } double Add(double a,double b); double Sub(double a,double b); double Mul(doub

类的多态与重载

*----------------------------------------------------------------------* *       CLASS superclass DEFINITION  定义基类 *----------------------------------------------------------------------* * *-----------------------------------------------------------

重载&gt;&gt;运算符

#include <iostream>   #include <stdio.h>   using namespace std;   class Input   {       public:          //实际重载是右移运算符          Input & operator >> (int &a)          {              scanf("%d",&a);              fflush

java中的重写和重载

重写 在java中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类的方法,就比如我们有一个类叫做Animals,Animals类中有一个叫做Call,然后我们继承Animals又生成了Cat类和Dog类,Cat和Dog也分别有自己特别的叫声,程序如下: 1 class Animals { 2 public void call() { 3 System.out.println("啊啊啊

关于运算符重载

运算符重载需遵循以下原则: 1.除了类所属关系运算符".".成员指针运算符".*".作用域运算符"::".sizeof运算符.三目运算符"?:"之外,C++中所有的运算符都可以进行重载 2.重载运算符限制在C++已有的运算符范围内,不允许创建新的运算符 3.重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符的操作数的个数及语法结构 4.运算符重载不能改变运算符用于内置类型的对象的含义,只能用于自定义类型对象之间,

模板类的友元重载

模板类的友元重载和普通类的友元重载有不同之处,可以参考这篇CSDN博客http://blog.csdn.net/ozwarld/article/details/7770808 #include <iostream> using namespace std; template <class T> class Test; // 模板类前置声明 template<class T> ostream& operator << (ostream& out

运算符重载

关键字:operator 相见:<高质量程序设计指南> P255 如果运算符被重载为全局函数,那么只有一个参数的运算符叫做一元运算符,有两个参数的运算符叫做二元运算符. 如果运算符被重载为类的成员函数,那么一元运算符没有参数(但是++和--运算符的后置版本除外),二元运算符只有右侧参数,因为对象自己成了左侧参数. 运算符重载的特殊性 如果重载为成员函数,则this对象发起对它的调用 如果重载为全局函数,则第一个参数发起对它的调用 禁止用户发明该语言运算符集合中不存在的运算符 除了函数调用运算符