C语言进阶

张萃

目录

  • 1 第一章  C++的初步知识
    • 1.1 从C到C++
    • 1.2 C++的词法和词法规则
    • 1.3 最简单的C++程序
    • 1.4 C++对C的扩充
      • 1.4.1 C++的输入输出
      • 1.4.2 用const定义常量
      • 1.4.3 函数原型声明
      • 1.4.4 函数重载
      • 1.4.5 函数模板
      • 1.4.6 有默认参数的函数
      • 1.4.7 变量的引用
      • 1.4.8 内置函数
      • 1.4.9 作用域运算符
      • 1.4.10 字符串变量
      • 1.4.11 动态分配/回收内存运算符
  • 2 类和对象
    • 2.1 面向对象程序设计方法概述
    • 2.2 类的声明和对象的定义
    • 2.3 类的成员函数
    • 2.4 对象成员的引用
    • 2.5 类和对象的简单应用
    • 2.6 类的封闭性和信息隐蔽
  • 3 关于类和对象的进一步讨论
    • 3.1 构造函数
    • 3.2 析构函数
    • 3.3 调用构造函数和析构函数的顺序
    • 3.4 对象数组
    • 3.5 对象指针
    • 3.6 共用数据的保护
    • 3.7 对象的动态建立和释放
    • 3.8 对象的赋值和复制
    • 3.9 静态成员
    • 3.10 友元
    • 3.11 类模板
  • 4 运算符重载
    • 4.1 什么是运算符重载
    • 4.2 运算符重载的方法
    • 4.3 重载运算符的规则
    • 4.4 运算符重载函数作为类成员函数和友元函数
    • 4.5 重载双目运算符
    • 4.6 重载单目运算符
    • 4.7 重载流插入运算符和流提取运算符
  • 5 继承与派生
    • 5.1 继承与派生的概念
    • 5.2 派生类的声明方式
    • 5.3 派生类的构成
    • 5.4 派生类成员的访问属性类型兼容规则
    • 5.5 派生类的构造函数和析构函数
    • 5.6 多重继承
  • 6 多态性与虚函数
    • 6.1 多态性的概念
    • 6.2 一个典型的例子
    • 6.3 虚函数
    • 6.4 纯虚函数与抽象类
  • 7 输入输出流
    • 7.1 C++的输入输出
    • 7.2 标准输出流
    • 7.3 标准输入流
    • 7.4 对数据文件的操作与文件流
    • 7.5 字符串流
什么是运算符重载

     

      C++ 为程序员提供了灵活的手段,让程序员自己定义类,自己设计相应的运算符(必须在已有的运算符基础上设计),使之应用于自己定义的类。

      与函数重载类似,对已有的运算符赋予新的含义,用一个运算符表示不同功能的运算,这就是运算符重载。

       实际上,我们在此之前已经使用了运算符重载。如<<是C++的移位运算符,它又与流对象cout配合作为流插入运算符,这是C++对<<进行了重载处理。

       1、运算符重载的实质

       运算符重载是对已有的运算符赋予多重含义。

       2、运算符重载的必要性

      C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)

       3、运算符重载的实现机制

       将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。

       编译系统对重载运算符的选择,遵循函数重载的选择原则。

例4.1  通过成员函数实现复数的加法。

class Complex

{ private:

   double real;

   double imag;

       public:

   Complex(){real=0;imag=0;}

   Complex(double r,double i){real=r;imag=i;}

   Complex complex_add(Complex &c2);

   void display();

   } ;

Complex Complex::complex_add(Complex &c2)

{  Complex c;

c.real=real +c2.real;   c.imag=imag+c2.image;

           return c;  }

   

void Complex::display()

{cout<<"("<<real<<","<<imag<<"i)"<<endl;}


int main()

{Complex c1(3,4),c2(5,-10),c3;

c3=c1.complex_add(c2);

cout<<"c1="; c1.display();

cout<<"c2="; c2.display();

cout<<"c1+c2="; c3.display();

return 0;

}

说明:

       1、在Complex类中定义了complex_add函数做加法,函数的参数是引用对象,作为一个加数。在函数里定义了临时对象c,两个赋值语句相当于:

       c.real = this->real +c2.real;

       c.imag = this->imag+c2.image;

      2、在main函数中通过对象c1调用加法函数,上面的语句相当于:

      c.real = c1.real +c2.real;

      c.imag = c1.imag+c2.image;

  思考:能否用“+” 运算符实现复数加法?