浅谈c++构造函数问题,初始化和赋值问题

 更新时间:2016年12月31日 09:19:46   投稿:jingxian  
下面小编就为大家带来一篇浅谈c++构造函数问题,初始化和赋值问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

默认构造函数(就是没有参数的构造函数)

The Default Constructor
The default constructor is the constructor used to create an object when you don't provide explicit initialization values. That is, it's the constructor used for declarations like this:

Stock stock1;  // uses the default constructor

1、由编译器自动生成

2、由我们自己定义的

这里又有两种情况

上面说了啊,default constructor有两种(……your own default constructor. This is a constructor that takes no arguments):

1)One is to provide default values for all the arguments to the existing constructor:

Stock(const char * co = "Error", int n = 0, double pr = 0.0);

2)The second is to use function overloading to define a second constructor, one that has no arguments:
Stock();

有一点注意的时候两者不能同时使用:

You can have only one default constructor, so be sure that you don't do both. (With early versions of C++, you could use only the second method for creating a default constructor.)

This is a constructor that takes no arguments:这个指的是调用的时候不带参数。

编译器自动添加默认构造函数的条件:编译器实现的构造函数其实就是什么都不做

1.没有任何自己定义的构造函数(即便是复制构造函数也不行,如果自己定义复制构造函数,则必须自己定义构造函数)

2、数据成员中没有const和reference。--因为要初始化。

拷贝构造函数的参数必须是引用的原因:拷贝构造函数的参数使用引用类型不是为了减少一次内存拷贝, 而是避免拷贝构造函数无限制的递归下去。

如果是值的话,那在传值的时候还要再调一次拷贝构造函数

然后又要传值,又要再调一次....
然后你就内存不够,当了

关于赋值==函数和拷贝构造函数的区别:

 

#include<iostream>
using namespace std;
class A
{ public:
int i;
A( const A& a)
{ i=a.i;
cout<<"copy is build"<<endl;
}
explicit A(int y)
{ i=y;
}
};
A fun(A i)
{ A a1(i);
 A a2=a1;//其实就调用拷贝构造函数
return a2;
}


int main()
{ A a(1);
fun(a);
 

}

 拷贝构造函数一共调用四次拷贝构造函数。。fun参数传值一次,a1(i)一次,a2(a1)一次,return的时候构造临时对象一次

如果函数返回对象,而不是指针,那么在执行return的时候,会使用被return的对象“复制构造”临时对象,然后,return语句执行完毕(遇到分号;了)函数内部创建的全部变量析构、出栈。而被“赋值构造”的临时对象则在调用该函数的语句执行完毕(遇到分号;或者右边的大括号})后,析构。

总结一句:

临时变量的生存范围是语句级——分号;结束或者右边的大括号}结束。语句结束之后,临时变量就被析构了~

以上就是小编为大家带来的浅谈c++构造函数问题,初始化和赋值问题全部内容了,希望大家多多支持脚本之家~

相关文章

  • 浅谈C++继承中的名字查找

    浅谈C++继承中的名字查找

    下面小编就为大家带来一篇浅谈C++继承中的名字查找。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 简要解读C++的动态和静态关联以及虚析构函数

    简要解读C++的动态和静态关联以及虚析构函数

    这篇文章主要介绍了简要解读C++的动态和静态关联以及虚析构函数,析构函数在C++编程中平时并不是太常用,需要的朋友可以参考下
    2015-09-09
  • 一个快速排序算法代码分享

    一个快速排序算法代码分享

    一个快速排序算法代码一个快速排序算法代码,代码内有注释,大家参考使用吧
    2014-01-01
  • 神奇的c/c++小游戏((提高你的编程兴趣)

    神奇的c/c++小游戏((提高你的编程兴趣)

    本文通过c/c++编写小游戏,可以提高新手们的编程兴趣,接下来我们一起来看看吧
    2021-08-08
  • C++ opencv图像处理实现图片几何变换示例

    C++ opencv图像处理实现图片几何变换示例

    这篇文章主要为大家介绍了C++ opencv图像处理实现图片几何变换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 深度剖析C语言结构体

    深度剖析C语言结构体

    今天小编就为大家分享一篇关于深度剖析C语言结构体,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • c++下迭代器总结

    c++下迭代器总结

    大家好,本篇文章主要讲的是c++下迭代器总结,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++中链表操作实例分析

    C++中链表操作实例分析

    本文给大家分享了个人对于C++中链表操作的理解,并对具体实例进行了分析,是篇非常不错的学习链表操作的文章,希望大家能够喜欢
    2017-07-07
  • C语言中打印特殊图案的实现代码

    C语言中打印特殊图案的实现代码

    以下代码实现了在C语言中打印特殊图案的解决方法。需要的朋友参考下
    2013-05-05
  • C++实现将简单密码译回原文的方法

    C++实现将简单密码译回原文的方法

    这篇文章主要介绍了C++实现将简单密码译回原文的方法,可实现将简单的字母位移类型的密码译回原文的功能,涉及C++简单字符串操作相关技巧,需要的朋友可以参考下
    2016-05-05

最新评论