今天学习一下类的成员函数,首先讲一下常规的类外的函数

写在类的外部的函数叫做全局函数,不属于任何的类。
如果写在类的里面就叫做类的成员函数

这里注意的是,类的成员函数如果加了const,就表明该函数不能对该类的成员数据进行任何的修改,一旦修改就会报错,称之为常函数。反之可以修改。如下

public:
    bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
    {
        return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
    }

那么类的成员函数可以定义在类的外部么?
答案是肯定的!!
如果我们想把类的成员函数定义在外面,则需要事先在类的内部声明好该函数,举例如下

class Sales_item
{
public:
    std::string isbn;//书号
    unsigned  units_sold;//数量
    double revenue;//销售额

public:
    double avr_price() const;//函数声明在类的内部

bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
    {
        return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
    }
};

double Sales_item::avr_price() const//定义在类的外部
{
}

但是需要注意的是,在类的外部定义类的成员函数的时候需要在函数的名称前加上“::”,再在前面加上类的名称,其中“::”称为范围解析,表示该函数属于这个类

一般类的成员函数声明都写在类的内部,函数的定义都写到外面。这样会使得类的结构看起来很整洁。

总体的练习代码如下:

#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
//销售项目
int sum(int x, int y)
{
    return x + y;
}

class Sales_item
{
public:
    std::string isbn;//书号
    unsigned  units_sold;//数量
    double revenue;//销售额

public:
    double avr_price() const;//函数声明在类的内部

bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
    {
        return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
    }
};

double Sales_item::avr_price() const//定义在类的外部
{
}

int main()
{
    Sales_item item1, item2;
    item1.isbn = "45646-78786";
    item1.units_sold = 10;
    item1.revenue = 300;

item2.isbn = "45646-786";
    item2.units_sold = 2;
    item2.revenue = 70;

if (item1.same_isbn(item2))
        cout << "这两个是相同的书 ";
    else
        cout << "这两个是不同的书 ";
    system("pause");
}

最后,给大家一些类的代码书写方面的建议,为了代码整体的美观和方便类的调用,因此一般将类的定义都写在头文件中,类的成员函数的声明在类中,函数的具体的定义都写在Cpp源码文件中,然后包含类定义的头文件包含进来,这样既美观易懂,而且也方便添加新的成员函数。

————————————————
版权声明:本文为CSDN博主「wD丶路人」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Peter_Red_Boy/article/details/90004417

C++学习笔记:类的成员函数的声明与定义相关推荐

  1. 类的成员函数 只声明 不定义

    #include <iostream> class A{ public: void f(); private: void g(); }; int main() { A a; return ...

  2. 【Python学习笔记】第八章 函数

    [Python学习笔记]第八章 函数 文章目录 [Python学习笔记]第八章 函数 前言 8.1 定义函数 8.2 调用函数 8.2.1 使用位置参数调用函数 8.2.2 使用关键字参数调用函数 8 ...

  3. 静态成员变量与静态成员函数的声明与定义

    类的静态成员变量在类中只能声明,定义和初始化要在类外: class Myclass { private: static int a; // 类内声明 } int Myclass::a = 10; // ...

  4. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  5. C++提高部分_C++类模板成员函数类外实现---C++语言工作笔记092

    然后我们再来说,类模板成员函数的类外实现 上面我们写一个Person类,然后 类模板template 然后写一个Person构造方法,然后,写一个showPerson方法 然后后面我们要用字符串,我们 ...

  6. C++ 学习笔记----类篇

    (一)基本概念: 1.类与对象: 1 //声明类 2 class Human { 3 4 //... Data members and methods go here 5 6 }; 7 8 //定义对 ...

  7. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  8. 类的成员函数指针(比较深入)

    From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块讲解的比较深入详细 推荐阅读 / 先 ...

  9. 【C++学习笔记】 纯虚函数详解,绝不纯属虚构!

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

最新文章

  1. wxwidgets mysql_wxWidgets导入Excel文件详细教程
  2. 启动转换安装失败 拷贝windows安装文件时出错_系统小技巧:“徒手”创建可启动的VHD系统...
  3. shell-----函数库调用
  4. 设计模式21:State 状态模式(行为型模式)
  5. AC自动机——多个kmp匹配
  6. 从后台获取的数据渲染到页面中的dom操作
  7. 参与全国软考调查问卷,赢精彩大奖
  8. android 通过platform.pk8,platform.x509.pem生成jks签名文件
  9. Win10 没有激活,如何改变任务栏位置
  10. 计算机装系统教程网,电脑重装系统教程知识
  11. SpringMvc+饿了么UI组件+七牛云做图片上传
  12. Python+CV2实现黑色背景的旋转图片矫正回水平图片
  13. 程序员白piao服务器。大派送
  14. Java JSON格式简介说明
  15. 利用“顺丰速运”下发GuLoader恶意软件的风险分析
  16. 使用css3和h5实现幻灯片,点击切换图片效果
  17. 十进制逢十进一的意思
  18. Nginx部署静态资源
  19. angular4前后端分离_使用Angular v4的新HTTP客户端
  20. tomcat 服务器访问日志配置方法

热门文章

  1. 《OpenGL超级宝典》编程环境配置
  2. 阿呆做网站(3)--建数据库
  3. 【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
  4. iOS之深入解析WKWebView的坑点收录和优化处理
  5. iOS基础知识(面试必备)
  6. G6 图可视化引擎——入门教程——插件与工具
  7. 《算法竞赛入门经典》 例题3-5 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
  8. 解决:AttributeError: module 'pygal' has no attribute 'Worldmap' 问题
  9. 【计算机类】大学生计算机专业电子书汇总
  10. matlab搭建sdn,软件定义网络SDN简介和简单仿真实验