成员函数 重载函数 构造函数的异同点

成员函数 重载函数 构造函数的异同点,第1张

成员函数是一个类或者结构体的内部成员函数,属于这个类或者结构体的接口。重载函数是名字相同但是参数或参数个数或者返回值类型不同。C++中就称为重载函数。比如:int �0�2a();void a();int a( int param );都是重载函数。构造函数是一个类或者结构体的对象初始化的函数。比如:class aaa{�0�2 �0�2 �0�2 aaa(){} �0�2 // 就是aaa类的构造函数,必须与类或结构体的名字相同。用于初始化类或结构体的成员变量等;}

  1、虚析构函数和析构函数在功能上是一回事,因此除了动态联编(此处意思:需要销毁

父类指针指向的子类对象的空间)外,其他性质和析构函数类似。

  2、析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);

  3、析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;当撤消对象时,编译系统会自动地调用析构函数。

构造函数主要用来对成员初始化和分配空间,析构函数用于执行一些清理任务,如释放分配给对象的内存空间等。

构造函数有以下特点:

1构造函数的名字必须与类名相同;

2构造函数可以有任意类型的参数,但不能具有返回类型;

3定义对象时,编译系统会自动地调用构造函数;

4构造函数是特殊的成员函数,函数体可以在类体内,也可写在类体外;

5构造函数被声明为公有函数,但它不能像其他成员函数那样被显式调用,它是在定义对象的同时被调用的。

析构函数有以下特点:

1析构函数的名字必须与类名相同,但它前面必须加一个波浪号 ~ ;

2析构函数没有参数,也没有返回值,而且不能被重载,因此在一个类中只能有一个析构函数;

3当撤销对象时,编译系统会自动地调用析构函数。

构造函数与普通函数的区别:

1 返回值类型的区别:

1 构造函数是没有返回值类型 的,

2 普通函数是有返回值类型的,即使函数没有返回值,返回值类型也要写上void。

2 函数名的区别:

1 构造函数的函数名必须要与类名一致,

2 普通函数的函数名只要符合标识符的命名规则即可。

3 调用方式的区别:

1 构造函数是 在创建对象的时候由jvm调用的。

2 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,

4 作用上的区别:

1 构造函数 的作用用于初始化一个对象。

2 普通函数是用于描述一类事物的公共行为的。

请记住,C++中,括号"()"除了用来判定表达式优先级之外,它还是 *** 作符。

这个 *** 作符叫做“函数调用 *** 作符”,又可以用作“类型构造 *** 作符”,它还可以用来作为C风格的“类型转换 *** 作符”。

比如,你可以这样定义一个整数,并将其初始化为8:

#include <iostream>

int main(int argc, char argv[])

{

int aInteger(8); // 注意这里我是怎么初始化aInterger的。

std::cout << aInterger << std::end;

return 0;

}

在上面那个表达式中,“()”就代表“类型构造 *** 作符”。

当然了,当你使用“()”去调用函数时,它就是“函数调用 *** 作符”;当你用它去强制转换一个对象的类型(C风格)时,它就是“类型转换 *** 作符”。

所以,如果你要构造一个自定义类的对象时,可以使用“类型构造 *** 作符”。这将导致编译器为你调用构造函数。

比如你写了一个类,叫BaseItem显然你可以这样定义一个BaseItem对象:

BaseItem aItem; // 调用默认构造函数;

你还可以这样定义一个BaseItem对象:

BaseItem aItem = BaseItem(); // 调用默认构造函数。这里"()"表示“类型构造 *** 作符”,

// 用来实例化一个对象

假如你的构造函数接受一个string对象作为参数,你还可以这样定义BaseItem:

BaseItem aItem("This is a base item"); // 这会使编译器为你调用相应的构造函数。

ok,上面的都明白了嘛?下面再开始讲类的构造函数和成员函数有什么区别。

(非静态)成员函数是通过对象/指向对象的指针/指向对象的引用来调用的。你只能通过这3种方式来调用一个成员函数。那么很显然,实质上无论如何要调用成员函数都必须通过对象。

比如BaseItem里面有一个成员函数叫memfunc,那么你可以这样调用它:

aItemmemfunc(parameters);

而构造函数却是用来构造对象的。在对象还没形成之前,你怎么能够通过对象去调用函数?所以你无法通过对象去调用构造函数。你只能采用上面我给出的那些形式,来显式(令编译器为你)调用构造函数。

而析构函数是用于销毁对象的。虽然构造函数和析构函数从实质上来说都是类的成员函数,然而因为它们和对象本身的生命周期有关,所以编译器不允许(逻辑上也不允许)你通过对象来调用它们。所以析构函数是编译器为你自动调用的。就是这样。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12177936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存