今天是我学习编程开发的第三天啦~ 今天我主要学习的内容是 函数哦~
看到 “函数” 这2个字,相信大多数刚开始学习编程开发的朋友都会觉得头痛吧~
嘿嘿,其实此 “函数” 非彼 “函数” ,我们这里说的 “函数” 实际上也可以叫做 “方法” 。
一个较大的程序一般分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。比如说,在 C++ 中,子程序的作用是由一个主函数 ( 入口函数 ( 方法 ) ) 和若干个函数 ( 方法 ) 构成。通常由主函数调用其他函数,其他函数之间也可以互相调用。除了入口函数之外,同一个函数可以被一个或多个函数调用任意多次。在程序设计中,我们常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,减少重复编写程序段的工作量。
有返回值且带有 ( 一个 ) 参数的函数的声明:
类型名标识符 + 函数名 + ( 类型标示符 + 参数 )
{
// 程序代码...
return 返回值;
}
没有返回值 (void) 且不带参数的函数的声明:
void + 函数名() //无值型(void) + 函数名()
{
// 程序代码...
}
|
对象作为函数参数
函数重载
⑴只有返回值不同,不能成为重载函数。
int test(inta,int b);
double test(inta,int b); //错误,只有返回值不同,不能成为重载函数。
⑵使用带缺省值的函数时,可能引发错误。如:
int test(inta, int b = 0);
int test(int a);
当用一个实参调用该函数时,如test(2),则会出现调用歧义性。
要说 MFC 里最重要,使用频率最多的,就要属构造函数和折构函数啦~ 让我们来认识一下。
构造函数 ( 常用于对象的初始化 )
默认构造函数 ( DefaultConstructor )
<类名>::<默认构造函数名> ( )
{
}
重载构造函数
自定义构造函数
Date::Date() //无参
{
year = 1900;
month = 1;
day = 1;
}
Date::Date( int y, int m, int d ) //自定义构造函数,带三个参数
{
year = y;
month = m;
day = d;
}
注意:若既有默认参数又有重载的构造函数时,可能出现二义 ( 歧义 ) 性。
使用不带参数的构造函数创建对象时,对象的创建形式为:类名对象名; 或: 类名对象名 = 类名();
使用带参数的构造函数创建对象时,对象的创建形式为:类名 对象名( 初始化参数表 );
或: 类名 对象名 = 类名( 初始化参数表 );
带默认参数的构造函数
可以使用带默认参数的构造函数 如: Circle( double = 1 );
注意:创建对象时必须考虑构造函数的形式,若程序中没有定义任何形式的构造函数,系统自动生成默认的无参构造函数。
构造函数的另一种用法:构造函数初始化列表
构造函数主要用来对类的数据成员进行初始化,常常将构造函数的参数值传送给数据成员,可将构造函数定义为 :
Date::Date(int y,int m,int d) : year(y),month(m),day(d)
{
}
一个类的对象是另外一个类的数据成员的情况
可以简单理解成:类成员的定义可以相互嵌套定义,一个类的成员可以用另一个类进行定义声明。
如果一个类的对象是另外一类的数据成员,那么在创建对象的时候系统将自动调用那个类的构造函数。
介绍完了构造函数之后呢,我们再来看看它的 “兄弟” 折构函数吧~
析构函数的定义
析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。
析构函数与构造函数最主要大不同就是在于调用期不同,构造函数可以有参数可以重载!
析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。
它不能带任何参数,也没有返回值(包括void类型)。一个类里只能有一个析构函数,不能重载。
如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数,它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。
学习完这两个函数之后,我们再来看看对象吧~
对象数组
类名数组名[常量表达式]={类名(参数表),…,类名(参数表)};
创建对象数组
Circlec[3]; –使用无参构造函数初始化数组中的元素,此时各个元素中的radius成员值均为1.
Circlec[3] = {Circle(1),Circle(2),Circle(3)}; –使用有参构造函数初始化对象元素
对象指针
Circle cir, *p = ○ ( & 表示引用)
在堆中创建动态对象
在类声明外定义的函数缺省情况下都是非内联函数,可用关键字inline强制定义为内联函数。