成员函数以定从属于类,不能独立存在,这是它与普通函数的重要区别。所以我们在类定义体外定义成员函数的时候,必须在函数名之前冠以类名,如Date::isLeapYear()。但如果在类定义体内定义成员函数时,并不需要在成员函数前冠以类名。

//=============================================
//日期类应用程序
//============================================= #include <iostream>
#include <iomanip> using namespace std; /**
*类定义体
*/
class Date{
private:
int year,month,day;
public:
//在类定义体内定义成员函数,不需要在函数名前冠以类名
void set(int y,int m,int d)
{
year = y;
month = m;
day = d;
};
bool isLeapYear();
void print();
}; //成员函数类定义体外定义 bool Date::isLeapYear()
{
return (year%== && year%!=)||(year%==);
} void Date::print()
{
cout<<setfill('');
cout<<setw()<<year<<'-'<<setw()<<month<<'-'<<setw()<<day<<'\n';
cout<<setfill(' ');
}

  需要注意的是,函数定义的花括号后面没有分号,而类定义的花括号后面以定由分号,这是由于C语言的历史原因造成的。class机制是建立在struct机制之上,所以要和struct对应。

  在类内定义的成员函数,就默认声明内联函数的性质,因此当代码量较小,不超过3行的成员函数,放在类中定义比较合适。同样,我们也可以在类外定义成员函数,对编译提出内联要求。

代码如下:

//=============================================
//日期类应用程序
//============================================= #include <iostream>
#include <iomanip> using namespace std; /**
*类定义体
*/
class Date{
private:
int year,month,day;
public:
//在类定义体内定义成员函数,不需要在函数名前冠以类名
void set(int y,int m,int d)
{
year = y;
month = m;
day = d;
};
bool isLeapYear();
void print();
}; //成员函数类定义体外定义 inline bool Date::isLeapYear() //显示内联
{
return (year%== && year%!=)||(year%==);
} void Date::print()
{
cout<<setfill('');
cout<<setw()<<year<<'-'<<setw()<<month<<'-'<<setw()<<day<<'\n';
cout<<setfill(' ');
}

2_成员函数(Member Functions)的更多相关文章

  1. C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化

    模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...

  2. c++ 静态类成员函数(static member function) vs 名字空间 (namespace)

    好多人喜欢把工具函数做成static member function.这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员. 例如: class my_math { public: ...

  3. const成员函数

    尽管函数名和参数列表都相同,void foo( ) const成员函数是可以与void foo( )并存的,可以形成重载! 我们假设调用语句为obj.foo(),如果obj为non-const对象,则 ...

  4. C++官方文档-常量成员函数

    #include <iostream> using namespace std; class MyClass { public: int x; static int n; const in ...

  5. 成员函数指针与高性能C++委托

    1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...

  6. [转]成员函数指针与高性能的C++委托

    原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...

  7. C++:Special Member Functions

    Special Member Functions 区别于定义类的行为的普通成员函数,类内有一类特殊的成员函数,它们负责类的构造.拷贝.移动.销毁. 构造函数 构造函数控制对象的初始化过程,具体来说,就 ...

  8. 为什么 C++ 中成员函数指针是 16 字节?

    当我们讨论指针时,通常假设它是一种可以用 void * 指针来表示的东西,在 x86_64 平台下是 8 个字节大小.例如,下面是来自 维基百科中关于 x86_64 的文章 的摘录: Pushes a ...

  9. 让gcc支持成员函数模板的trick

    让gcc支持成员函数模板的trick 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   gcc 4.7.3 不支持成员 ...

随机推荐

  1. bzoj4326 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n ...

  2. java 如何将 word,excel,ppt如何转pdf --openoffice (1)

    承上启下,可折叠 上一篇说的是:服务器是windows server时,用jacob将msoffice(指的是word,excel,ppt)转换成pdf. 若被部署项目的服务器是centOS等linu ...

  3. mybatis不可忽略的细节

    自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础 ...

  4. VUE-脚手架搭建

    1.什么vue-cli    vue-cli是vue.js的脚手架,用于自动生成vue.js工程模板的. 步骤: 2.安装   ->全局安装   npm install vue-cli -g 或 ...

  5. HTTP/HTTPS GET&POST两种方式的实现方法

    关于GET及POST方式的区别请参照前面文章:http://www.cnblogs.com/hunterCecil/p/5698604.html http://www.cnblogs.com/hunt ...

  6. Python学习--使用dlib、opencv进行人脸检测标注

    参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...

  7. 机器学习01:使用scikit-learn的线性回归预测Google股票

    这是机器学习系列的第一篇文章. 本文将使用Python及scikit-learn的线性回归预测Google的股票走势.请千万别期望这个示例能够让你成为股票高手.下面按逐步介绍如何进行实践. 准备数据 ...

  8. rsync推送和拉取

    rsync格式: # 拷贝本地文件.当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式.如:rsync -a /data /backup rsync [OP ...

  9. 洛谷 [P2483] [模板] k短路

    人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #i ...

  10. BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]

    2806: [Ctsc2012]Cheat 题意: 多个主串和多个询问串,每次询问将询问串分成多个连续子串,如果一个子串长度>=L且在主串中出现过就是熟悉的 如果熟悉的字符串长度>=询问串 ...