c++之构造函数

xiaoxiao2021-02-28  8

1如何进行类的对象的初始化:

如果类内有构造函数,则可以按照构造函数的值进行初始化,如果没有构造函数,则用类内初始值进行初始化。

2类内的公有成员和私有成员的区别:

私有成员(包括数据和成员函数)只能被该类的成员函数和友元函数访问。公有成员(包括数据和成员函数)可以被任何函数访问.

注意:若将private省略,则默认为私有成员(成员包括函数和变量)。

3类的成员函数实现:

(1)      在类中声明函数的原型

(2)      在类外给出函数体的实现,加上类名和作用域限定符“::”,或在类内给出函数体(内联成员函数)。

(3)      允许声明重载函数和带默认参数值的函数。

4构造函数:

         在类中的一类特殊函数

         作用:在对象被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态。

例如:希望在构造一个Clock类对象时,将初试时间设为0:0:0,就可以通过构造函数来设置。

分类:一般构造函数,默认构造函数,委托构造函数,复制构造函数四类

5构造函数的形式

1)函数名与类名相同 2)不能定义返回值类型,也不能有 return语句;

3)可以有形式参数,也可以没有形式参数

4)可以是内联函数

5)可以重载

6)可以带默认参数值

6构造函数的调用时间

         在创建对象的时候被自动调用

         例如:Clock myClock0,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隐含的赋值构造函数

         如果程序员没有为类声明拷贝初始化构造函数(参数为类的引用),则编译器自己生成一个隐含的复制构造函数。这个构造函数主要执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员(采用参数引用的方法)。对于自己定义的构造函数,执行的是不是复制作用,全看构造函数内部的代码!

转载请注明原文地址: https://www.6miu.com/read-2400334.html

最新回复(0)