类的直接初始化、复制初始化、赋值
来源:互联网 发布:林少华施小炜 知乎 编辑:程序博客网 时间:2024/05/21 01:48
一. 定义区别:
初始化是创建变量时给变量赋初值;赋值是擦除变量之前的值,赋给它新的值。
类的直接初始化是在创建对象时调用类的默认构造函数或普通构造函数;
类的复制初始化是在创建对象时调用类的拷贝构造函数
类的赋值是调用类的赋值操作符。
对于类class A{};
class A{
A(); //默认构造函数
A(const A& a); //拷贝构造函数,拷贝构造函数是为了防止浅拷贝,所以对于会发生浅拷贝的类,需要定义拷贝构造函数
A& operator=(const A& a); //赋值操作符
~A(); //析构函数
}
二. 可以通过下面代码来加深了解:
#include<iostream>#include<vector>#include<string>using namespace std;class student{ public: student() { cout<<"默认构造函数"<<endl; } student(const student&) { cout<<"拷贝构造函数"<<endl; } student &operator=(const student &) { cout<<"赋值操作符"<<endl; return *this; } ~student() { cout<<"析构函数"<<endl; }};//形参为student对象void fun1(student obj){}//形参为student对象的引用void fun2(student &obj){}student fun3(){ student obj; return obj;}int main(){ cout<<"student a"<<endl; student a; //调用默认构造函数 cout<<"fun1(a);"<<endl; fun1(a); //调用拷贝构造函数和析构函数 cout<<"fun2(a);"<<endl; fun2(a); //不调用四大函数 cout<<"a=fun3();"<<endl; a=fun3(); //调用默认构造函数、赋值操作符、析构函数 cout<<"student *p=new student;"<<endl; student *p=new student; //调用默认构造函数 cout<<"vector<student> even(3);"<<endl; vector<student> even(3); //调用三次默认构造函数 cout<<"delete p"<<endl; delete p; //调用析构函数 cout<<"student b=a;"<<endl; student b=a; //调用拷贝构造函数 cout<<"student c;c=a; "<<endl; student c; //调用默认构造函数 c=a; //调用赋值操作符 system("pause"); return 0; //调用多次析构函数}
0 0
- 类的直接初始化、复制初始化、赋值
- C++类的直接初始化和复制初始化举例
- 复制初始化和直接初始化的区别
- 直接初始化与复制初始化的区别
- 直接初始化和复制初始化
- 直接初始化与复制初始化
- 直接初始化与复制初始化
- 直接初始化和复制初始化
- 复制初始化和直接初始化
- 直接初始化与复制初始化
- 类的赋值初始化
- C++ 直接初始化与赋值初始化,讲的很仔细
- C++ 拷贝、复制、赋值 、初始化的理解
- 直接初始化 和 复制初始化 的细微差别
- C++对象的直接初始化和复制初始化
- 深入解释直接初始化与复制初始化的区别
- 简述复制初始化与直接初始化的作用
- 深入解释直接初始化与复制初始化的区别
- Valid Palindrome
- 设计模式--模板方法设计模式
- 指纹模块与电脑通信 - java使用RXTX包实现串口通信
- 实际用户ID,有效用户ID及设置用户ID
- 启动Eclipse时报错【Failed to create the Java Virtual Machine】解决方法--easy
- 类的直接初始化、复制初始化、赋值
- 最好的我们3
- UVa 202 - Repeating Decimals
- ImageButton和ImageView
- Memcached主从同步备份负载配置
- Activity和Service通信
- 表视图的常用属性和方法
- PHP预定义变量(一)
- HLS协议解析1