C++结构体:默认构造函数,复制构造函数,重载=运算符

做leetcode的时候经常看到有结构体的默认构造函数,觉得很奇怪,才发现原来c++的结构体与c语言的结构体不一样,c++的结构体更像是一个类,

C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值。

比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,就需要实现上述三个函数,否则就只能用指针了。

转:http://blog.csdn.net/fu_zk/article/details/10539705

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. struct ST
  5. {
  6. int a;
  7. int b;
  8. ST()  //默认构造函数
  9. {
  10. a = 0;
  11. b = 0;
  12. }
  13. void set(ST* s1,ST* s2)//赋值函数
  14. {
  15. s1->a = s2->a;
  16. s1->b = s2->b;
  17. }
  18. ST& operator=(const ST& s)//重载运算符
  19. {
  20. set(this,(ST*)&s)
  21. }
  22. ST(const ST& s)//复制构造函数
  23. {
  24. *this = s;
  25. }
  26. };
  27. int main()
  28. {
  29. ST a ;  //调用默认构造函数
  30. vector<ST> v;
  31. v.push_back(a);  //调用复制构造函数
  32. ST s = v.at(0);  //调用=函数
  33. cout << s.a <<"  " << s.b << endl;
  34. cin >> a.a;
  35. return 0;
  36. }
时间: 2024-10-02 03:28:15

C++结构体:默认构造函数,复制构造函数,重载=运算符的相关文章

结构体类型快速驱魔运算及运算符的重载

下面得到这段代码可以用在很多地方:只需要自己修改下接Ok. 1 struct Matrix 2 { 3 long long mat[N][N]; 4 Matrix operator*(const Matrix m)const//定义矩阵乘法的运算符* 5 { 6 Matrix tmp; 7 for(int i = 0;i < n;i++) 8 { 9 for(int j = 0;j < n;j++) 10 { 11 tmp.mat[i][j] = 0; 12 for(int k = 0;k &

构造函数复制构造函数经典问题

◆由于构造函数不能被继承,因此,派生类的构造函数中除了对派生类中数据成员进行初始化外,还必须通过调用直接基类的构造函数来对基类中数据成员初 始化,一般地将,对派生类中数据成员初始化放在该派生类构造函数的函数体内,而调用基类构造函数的基类中数据成员初始化放在该构造函数的成员初始化表中. 派生类构造函数的格式如下表示: <派生类构造函数名>(<参数表>) : <成员初始化表> { <派生类构造函数的函数体> } 其中,<派生类构造函数名>同该派生类的

C++的简单总结(复制构造函数,深拷贝,前拷贝,默认属性)

类的三大属性: private,public,protected 1,对于类的成员变量或者函数,缺省即为私有 #include <iostream> using namespace std; class A { int y; //私有成员 int x; //私有成员 public: A(int xx, int yy) {x = xx; y = yy;} void setx(int m) {x = m;} void sety(int n) {y = n;} }; int main() { A a

函数重载与复制构造函数

函数重载与复制构造函数   一.函数重载 1.普通函数重载 用main函数多次重复调用一个相同名字但是不同类型的函数来处理不同类型的数据. 如 void func(int); void func(double); float func(float); void func(double); 2.成员函数的重载 我们可以将函数的重载推广到类的成员函数. Class  boy { Public: void  sum(); void  sum(int  x, int  y); } 二.函数的默认参数 在

java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

当新对象被创建的时候,会调用构造函数.每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,java编译器会为这个类创建一个默认的构造函数. java中构造函数的重载和方法重载很相似.可以为一个类创建多个构造函数.每一个构造函数都必须有他唯一的参数列表. java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不是自己写的构造函数的情况下,java不会创建默认的复制构造函数.

C++类的复制构造函数和赋值运算符

前言: C++面向对象的编程过程中,凡是在类中运用到动态内存分配的时候总是会写一个显示的复制构造函数和赋值重载运算符,本文将结合C++ Primer Plus一书的内容分析下原因: 一.在C++编程中如果没有编写下列成员函数,系统会自动的提供: (1)构造函数 (2)析构函数 (3)地址运算符 (4)赋值构造函数 (5)赋值运算符 其中(1)-(3)在编程中不会产生什么影响,但是(4)(5)会造成较大的影响 二.赋值构造函数 1.函数原型  Class_name(const Class_name

关于C++类中的土著民:构造函数,复制构造函数,析构函数

我们初学C++时可能会对类的构造函数,复制构造函数,析构函数有点疑问.整理如下(个人见解,如有错误,还望指正.): 1.构造函数 根据构造函数的定义知它的作用是初始化类的数据成员或内嵌类的对象,所以它的参数表就应该是它要初始化的对象类型.构造函数分三类:默认构造函数.构造函数.委托构造函数. 默认构造函数 默认构造函数没有返回值,没有参数表,没有函数体,如果类内没有显式的定义构造函数,系统会自动生成默认构造函数,如果已经定义了构造函数,但仍需要默认构造函数,可以在默认构造函数参数表后加defau

C++ Primer 学习笔记_54_类与数据抽象 --复制构造函数、赋值操作符

复制控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,需要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数:具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式的使用复制构造函数:当将该类型的对象传递给函数或者从函数返回该类型的对象时,将隐式使用复制构造函数.     析构函数:作为构造函数的互补,当对象超出作用域或动态分配的对象被删除

关于复制构造函数的几个问题

一.什么是复制构造函数 复制构造函数是一种特殊的构造函数,其形参是本类对象的引用,作用是完成同类对象之间的复制.一般情况下编译器生成一个默认的复制构造函数不需要我们考虑,但有些情况下,默认的复制构造函数无法提供完整的功能,这时就需要我们自己来编写实现.复制构造函数形式如下: //假如类名是Test class Test { public: Test(){} /*复制构造的形参是通过引用传递的, 因为如果不用引用就是使用值传递, 会调用复制构造函数,形成一个矛盾! */ Test(const Te

C++构造函数详解(复制构造函数)

转载自:http://www.cnblogs.com/raichen/p/4752025.html 更多内容详见:http://blog.csdn.net/lwbeyond/article/details/6202256 构造函数是干什么的 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员. 构造函数的种类 1 class Complex 2 { 3 4 private : 5 double m_real;