1如何进行类的对象的初始化:
如果类内有构造函数,则可以按照构造函数的值进行初始化,如果没有构造函数,则用类内初始值进行初始化。
2类内的公有成员和私有成员的区别:
私有成员(包括数据和成员函数)只能被该类的成员函数和友元函数访问。公有成员(包括数据和成员函数)可以被任何函数访问.
注意:若将private省略,则默认为私有成员(成员包括函数和变量)。
3类的成员函数实现:
(1) 在类中声明函数的原型
(2) 在类外给出函数体的实现,加上类名和作用域限定符“::”,或在类内给出函数体(内联成员函数)。
(3) 允许声明重载函数和带默认参数值的函数。
4构造函数:
在类中的一类特殊函数
作用:在对象被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态。
例如:希望在构造一个Clock类对象时,将初试时间设为0:0:0,就可以通过构造函数来设置。
分类:一般构造函数,默认构造函数,委托构造函数,复制构造函数四类
5构造函数的形式
(3)可以有形式参数,也可以没有形式参数
(4)可以是内联函数
(5)可以重载
(6)可以带默认参数值
6构造函数的调用时间
在创建对象的时候被自动调用
例如:Clock myClock(0,0,0);
7 构建的对象的初始化的两种方法
(1) 使用构造函数
(2) 如果构造函数没有对对象进行初始化,则使用类内初始值进行初始化。
8如果未定义构造函数,则用调用构造函数对对象进行初始化时,编译器将报错。
9默认的构造函数:调用时不需要实参
(1) 参数表为空的构造函数
(2) 全部参数都有默认值的构造函数。
(3) Clock::Clock():hour(0),minute(0),second(0) { }
(4) Clock::Clock(int newH=0,intnewM=0,int newS=0) { }
10隐含生成的默认构造函数
(1) 定义:如果程序中未定义任何构造函数,则编译器将自动生成一个默认构造函数(所以我们一般要定义一个默认构造函数)
(2) 特点:
1参数列表为空,不为数据成员设置初始值
2如果类内定义了成员初始值,则用类内初始值,如果类内未定义初始值,则默认初始化。
3基本类型的数据默认初始化是不确定的。
11委托构造函数
(1) 定义:类中往往有多个构造函数,他们只是参数表列表不同,这时,为了避免代码重复,可以使用委托构造函数。
(2) 例如:
Clock(int newH, int newM, int newS) :hour(newH),minute(newM), second(newS) { }
Clock::Clock(): hour(0),minute(0),second(0) { }//默认构造函数
12复制构造函数
(1)定义:复制构造函数是一类特殊的构造函数,其形参为本类的引用
类名(const 类名 &对象名);//复制构造函数(采用参数引用的方法)
(2)作用:用同一类的旧对象去初始化新的对象
(3)调用时机:
1用旧对象对新对象进行初始
2如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造
3如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递 给主调函数,此时发生复制构造.
13隐含的赋值构造函数
如果程序员没有为类声明拷贝初始化构造函数(参数为类的引用),则编译器自己生成一个隐含的复制构造函数。这个构造函数主要执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员(采用参数引用的方法)。对于自己定义的构造函数,执行的是不是复制作用,全看构造函数内部的代码!