C++编译器帮我们做了些什么
作者:网络转载 发布时间:[ 2014/8/12 10:17:10 ] 推荐标签:.NET C++
我们平时编写代码都是使用的集成开发工具,很多时候都忽略了c++中隐藏的成员函数。具体来说,c++编译器会自动提供一下几个基本函数:
●默认构造函数,如果没有定义构造函数
●复制构造函数,如果没有定义
●析构函数,如果没有定义
●赋值操作符,如果没有定义
●地址操作符
class Stack
{
private:
char *str;
public:
Stack(); //默认构造函数
~Stack();//析构函数
Stack (const Stack &); //复制构造函数
Stack (char *str ) // 构造函数
Stack & Stack::operator=(const Stack &); //赋值操作符
Stack & operator =(const Stack &); //地址操作符
void Add() // 成员函数
};
刚开始学习c++的时候见的比较多的也默认构造函数和析构函数了,其他的几个很少用到,甚至在代码中没有见到过,在这里梳理一下。
1、默认构造函数。如果没有提供任何构造函数,c++将创建一个没有任何参数和行为的默认构造函数。如果定义了构造函数,c++将不会定义默认构造函数。如果希望在创建对象时显式地对它进行初始化,或需要创建对象数组时,则必须显式地定义默认构造函数。这里需要说明一下,在创建对象数组时,这个类必须提供默认构造函数,因为初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。
有两种方式可以用来定义默认构造函数,一种是给已有构造函数的所有参数提供默认值:
Stock(const char* a = "Error", int m = 0,double dr = 0.0);
另一种方式是通过函数重载来定义另一个构造函数——一个没有参数的构造函数:
Stock();
由于只能有一个默认构造函数,因此不要同时采用这两种方式。
2、复制构造函数
又叫拷贝构造函数。它用于将一个对象复制到新创建的对象中。也是说,它用于初始化过程中,而不是常规的赋值过程中。类的复制构造函数原型通常如下:
class_name (const class_name &)
它接受一个指向类对象的常量引用作为参数。
这里需要注意复制构造函数和赋值操作符的区别,以免混淆两者的功能。
1)新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。每当程序生成了对象副本时,编译器都将使用复制构造函数,具体说,当函数按值传递对象或函数返回对象时,都将使用复制构造函数。假设motto是一个Stack类对象,下面几种都会调用复制构造函数。
Stack ditto(motto);
Stack ditto = motto;
Stack ditto = Stack(motto);
Stack *pDitto = new Stack(motto);
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11