C++成员函数(Member Functions)
目录
C++成员函数(Member Functions)
1、成员函数定义(Member Function Definition)
2、内联(Inline)
3、常成员函数(Const Member Functions )
4、使用对象指针(Using Object Pointer)
5、重载成员函数(Overloading Member Functions)
6、测试代码(Testing Codes)
1、成员函数定义(Member Function Definition)
(1)成员函数一定从属于类,不能独立存在,这是它与不同函数的区别
(2)成员函数定义可以放在类定义中,也可以先在类定义中声明,然后在类定义之外进行定义
例如:
class Date{
.....
public:
void set (int y,int m,int d){ /*定义类成员函数*/
year=y;
month=m;
day=d;
}
void isLeapYear() /*声明类成员函数*/
.....
};
/* "::"为空间引导符 */
void Date::isLeapYear(){ /*定义类成员函数*/
.....
}
2、内联(Inline)
(1)目的:获取最佳性能
(2)要求:函数足够简单,不含有循环结构等
(3)分类:隐式内联,显示内联
(4)形式:使用inline关键字修饰
3、常成员函数(Const Member Functions )
(1)成员函数的操作,只对对象进行读操作,则该成员函数可定义为常成员函数
(2)形式:声明和定义形式上一致,使用关键字const修饰
(3)位置:在函数形参列表的右括号后面加上const
例如:
class Date{
int year,month,day; /*声明类成员变量*/
/*public 关键字表示可以提供给外界公有*/
public:
/*默认内联*/
void set (int y,int m,int d){ /*声明类成员函数*/
year=y;
month=m;
day=d;
}
void isLeapYear()const; /*声明类成员函数*/
};
/*显示内联*/
inline void Date::isLeapYear()const{ /*定义类成员函数*/
.....
}
(4)倘若定义set成员函数为常成员函数,编译报错
4、使用对象指针(Using Object Pointer)
(1)一个类可以创建多个对象,每个对象都可调用该类的成员函数
(2)一般形式:ObjectName.MemberFunctionName(paramters);
(3)对象指针形式:ObjectPointer->MemberFunctionName(paramters);或(*ObjectPointer).MemberFunctionName(paramters);
5、重载成员函数(Overloading Member Functions)
(1)重载技术定义:c++可以根据函数参数的类型、数量和排列顺序的差异,来区分同名函数
(2)相应的同名函数称为重载函数
(3)返回类型不同不允许重载函数
6、测试代码(Testing Codes)
#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
class Date{
int year,month,day; /*声明类成员变量*/
/*public 关键字表示可以提供给外界公有*/
public:
/*默认内联*/
void set (int y,int m,int d){ /*定义类成员函数*/
year=y;
month=m;
day=d;
}
void isLeapYear()const; /*声明类成员函数*/
void print()const; /*声明类成员函数*/
void set(char* s);
};
void Date::set(char* s){
cout<<"重载->set"<<s<<endl;
}
/*显示内联*/
inline void Date::isLeapYear()const{ /*定义类成员函数*/
if(year%4==0 && year%100!=0 || (year%400==0))
cout<<" the leapyear "<<" "<<"->";
else
cout<<" not leapyear "<<" "<<"->";
}
void Date::print()const{
cout<<year<<'-'<<month<<'-'<<day<<endl;
}
int main()
{
Date d;
d.set(2019,6,2);
d.isLeapYear();
d.print();
/*使用对象指针(Using Object Pointer)*/
Date* dp=new Date;
dp->set(2020,6,2);
dp->isLeapYear();
dp->print();
/*重载成员函数(Overloading Member Functions)*/
Date e;
char str[12]="2018-06-02";
char* strp=str;
e.set(strp);
}