普通函数

C++是在C语言的基础上增加了面向对象特性的语言,是C语言的超集
  • C++中的普通函数与C语言中的普通函数具有类似的性质。请参照以下博客:C语言-04-函数

与类相关的函数

C是一种OOP语言,类是OOP语言的核心,C++中的一部分函数与类相关。
  • 构造函数与拷贝构造函数

    • 构造函数

      • 是一种特殊的成员函数,在使用类创建对象时被执行,通常用于在创建对象时为某些成员变量设置初始值。

      • 构造函数的定义规范

        • 函数名与类名相同
        • 不返回任何值
      • 构造函数的种类

        • 无参的构造函数
        • 有参的构造函数
          • 可以使用初始化列表来初始化字段
      • 定义方式

        // 无参的构造函数
        ClassName() {
        // body of the function
        }
        // 有参的构造函数,使用初始化列表
        ClassName(MemberVariableType memberVariable) : variable(memberVariable) {
        // body of the function
        }
    • 拷贝构造函数
      • 是一种特殊的构造函数,在创建对象,使用同一类中之前创建过的对象来初始化新创建的对象

      • 拷贝构造函数被调用的场景

        • 使用另一个同类型的对象来初始化新创建的对象
        • 赋值对象把它作为参数传递给函数
        • 赋值对象,并从函数返回这个对象
      • 注意

        • 若没有定义拷贝构造函数,编译器会自动定义一个。但是在一下情形下,必须定义一个拷贝构造函数

          • 类中有指针类型的成员变量,并且有动态内存分配
      • 定义方式

        ClassName(const ClassName &classInstance) {
        variable = classInstance.variable
        }
  • 析构函数

    • 是一种特殊的成员函数,在类的象被销毁时被执行,通常用于在跳出程序前释放资源

    • 析构函数的定义规范

      • 函数名与类名相同,需要在函数名前加上波浪号(~)作为前缀
      • 不返回任何值,不带有任何参数
    • 定义方式

        ```
      ~ClassName() {
      // Release the resource of the classInstance
      }
      ```
  • 友元函数

    • 一种定义在类的外部,有权访问类的私有成员和保护成员的函数

    • 定义方式

      // 在类内部定义友元函数原型
      friend returnType functionName();
      // 在类外部定义友元函数的实现,不需要范围解析运算符 ::
      returnType functionName() {
      body of the function;
      }
    • 注意

      • 友元函数不是成员函数,不能使用this指针
  • 内联函数

    • 在编译阶段,编译器会将内联函数的代码副本复制到每一个调用该该内联函数的地方,使用inline关键字定义,如下

      inline returnType functionName() {
      // body of the function
      }
    • 内联函数的注意事项

      • 类定义中定义的函数,默认都是内俩函数,即使没有使用inline关键字
      • 每次修改内联函数,都必须重新编译该函数的所有调用代码(替换函数调用处旧的内联函数副本)
  • 示例

    • 定义Animal类

      class Animal {
      private:
      string name; // 名字
      int *age; // 年龄
      public:
      // set方法
      inline void setName(string animalName) {
      name = animalName;
      }
      void setAge(int animalAge) {
      *age = animalAge;
      }
      // 无参的构造函数
      Animal() {
      cout << "Normal constructor" << endl;
      // 为指针分配内存地址
      age = new int;
      }
      // 有参的构造函数
      Animal(string animalName, int animalAge) {
      cout << "Normal constructor with parameter" << endl;
      name = animalName;
      // 为指针分配内存地址
      age = new int;
      *age = animalAge;
      }
      // 拷贝构造函数
      Animal(const Animal &animal) {
      cout << "Copy constructor" << endl;
      name = animal.name;
      // 为指针分配内存地址
      age = new int;
      *age = *animal.age;
      }
      // 友元函数
      friend void printAnimal(const Animal animal);
      // 析构函数
      ~Animal() {
      cout << "Release the resource of the classInstance" << endl;
      delete age;
      }
      };
    • 定义Animal类的友元函数

      // 友元函数的定义
      void printAnimal(const Animal animal) {
      cout << "狗的名字:" << animal.name << " 年龄:" << *animal.age << endl;
      }
    • main()函数

      int main(int argc, const char * argv[]) {
      // 使用有参的构造函数创建Animal对象
      Animal dog1;
      dog1.setName("TOBY");
      dog1.setAge(5);
      // 使用友元函数打印dog1
      printAnimal(dog1);
      // 使用无参的构造函数创建Animal对象
      Animal dog2("MAX", 4);
      // 使用友元函数打印dog2
      printAnimal(dog2);
      // 使用拷贝构造函数创建Animal对象
      Animal dog3 = dog2;
      printAnimal(dog3);
      return 0;
      }

C++语言-02-函数的更多相关文章

  1. C语言02

    C语言02 1.2 C语言与C程序 1.计算语言 语言发展 机器语言:机器语言是机器能直接识别的程序语言或指令代码,勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直 ...

  2. C 语言 时间函数使用技巧(汇总)

    time.h 头文件 是 C 语言中 有关 时间的函数所储存的头文件 #include <time.h> 在介绍时间函数用法之前,我们首先要了解在 time.h 头文件中已经声明了的一个结 ...

  3. C语言pow函数编写

    C语言pow函数编写 #include<stdio.h> double chaoba(double f,double q); //声明自定义函数 void main(void) { dou ...

  4. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  5. C语言printf()函数:格式化输出函数

    C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为:     int printf( char ...

  6. C语言的函数

    "函数"在英文的翻译是"function",无论在自然科学还是计算机科学都是这个词,而"function"的本意是"功能" ...

  7. c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)

    C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...

  8. Go语言示例-函数返回多个值

    Go语言中函数可以返回多个值,这和其它编程语言有很大的不同.对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性. 简单如交换两个数值的例子: package mai ...

  9. 【学习笔记】【C语言】函数

    一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...

  10. 【转载】 c语言inline函数的使用

    c语言inline函数的使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inli ...

随机推荐

  1. C++的最佳特性(译)

    最近看到了很多优秀的文章,包括<Why mobile web apps are slow>,实在忍不住翻译出来跟大家分享.这篇文章通过大量的实验和参考文献向我们说明移动应用开发所遇到的问题 ...

  2. 对于Discuz!NT不允许新用户注册的解决办法

    客户论坛用的是Discuz!NT,但是用户注册总是提示不允许新用户注册,对于这个问题,网上好多说的是管理员登录后台,在"用户与访问控制"里将允许新用户注册改为"是&quo ...

  3. python之IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  4. Eclipse魔法堂:任务管理器

    一.前言        Eclipse的任务管理器为我们提供一个方便的入口查看工程代办事宜,并定位到对应的代码行继续之前的工作. 二.使用示例        示例1: /** * @Descripti ...

  5. GPUImage滤镜之自然饱和度

    自然饱和度”是图像整体的明亮程度,“饱和度”是图像颜色的鲜艳程度. “饱和度”与“色相/饱和度”命令中的“饱和度”选项效果相同,可以增加整个画面的“饱和度”,但如调节到较高数值,图像会产生色彩过饱和从 ...

  6. VC使用libcurl模拟登录CSDN并自动评论资源以获取积分

    环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求 ...

  7. 淘宝API开发系列---阿里.聚石塔.开放平台的使用

    好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...

  8. 有关C#标签Attribute的熟悉

    Attribute 简单用法: 最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAt ...

  9. 很有趣的Java分形绘制

    部分与整体以某种形式相似的形,称为分形. 首先我们举个例子:        我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可 ...

  10. Java的final关键字详解

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...