类的直接初始化、复制初始化、赋值
2014-10-30 10:04
246 查看
一. 定义区别:
初始化是创建变量时给变量赋初值;赋值是擦除变量之前的值,赋给它新的值。
类的直接初始化是在创建对象时调用类的默认构造函数或普通构造函数;
类的复制初始化是在创建对象时调用类的拷贝构造函数
类的赋值是调用类的赋值操作符。
对于类class A{};
class A{
A(); //默认构造函数
A(const A& a); //拷贝构造函数,拷贝构造函数是为了防止浅拷贝,所以对于会发生浅拷贝的类,需要定义拷贝构造函数
A& operator=(const A& a); //赋值操作符
~A(); //析构函数
}
二. 可以通过下面代码来加深了解:
初始化是创建变量时给变量赋初值;赋值是擦除变量之前的值,赋给它新的值。
类的直接初始化是在创建对象时调用类的默认构造函数或普通构造函数;
类的复制初始化是在创建对象时调用类的拷贝构造函数
类的赋值是调用类的赋值操作符。
对于类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; //调用多次析构函数 }
相关文章推荐
- hashmap在初始化的时候直接赋值的方法
- 5-2-1 数组变量-直接初始化数组-length优势-int[] b=a-a让b共同管理数组-复制数组
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- C++编译优化之RVO(Return Value Optimization) &&C++直接初始化与赋值初始化的区别
- 举例说明类 直接初始化VS复制初始化【未完待续】
- C++的一大误区-深入理解直接初始化与复制初始化的区别
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- c++中的直接初始化与复制初始化
- 直接初始化与复制初始化
- C++直接初始化和复制初始化1
- C++直接初始化与复制初始化的区别深入解析
- C++直接初始化和复制初始化2
- C++中直接初始化与复制初始化
- 简述复制初始化与直接初始化的作用
- C++ 直接初始化和复制初始化
- C++直接初始化和复制初始化
- 直接初始化与复制初始化
- NSDictionary基础-创建、初始化、赋值、获取、复制
- 直接初始化和复制初始化
- C++对象的直接初始化和复制初始化