c++构造函数 对象初始化
2016-05-05 16:27
477 查看
最近查看了关于c++构造函数的博客,为了防止关键知识的遗忘,特此记录一些要点,以便于今后的查阅。
如果不主动书写构造函数,c++或默认提供一般构造函数,拷贝构造函数以及复制运算符的操作。
一般的构造函数没有任何参数,默认提供的该种构造函数不执行任何操作
默认提供的拷贝构造函数简单的将成员变量赋值
默认提供的复制运算也是简单的将成员变量赋值
假设有类A,3种初始化方法在代码中表现如下
A a(); 一般的构造函数(带参数的一般构造函数可以视作对a的重载)
A a(b); 拷贝构造函数
A a = c; 赋值运算
值得注意的是 如果有动态分配的类成员 那么应该重载拷贝构造函数和赋值运算符
主要是由于,默认的考培构造和=运算符都是简单的进行成员的复制,这样会导致两个对象的成员同时指向一块内存区域,两个成员粘滞在一起,改动了其中一个,另一个也会发生改变。所以必须重载这个函数以及运算符,保证每个对象的成员(动态分配)都有自己独立的空间。
关于如何对赋值运算符进行重载, 会在另一篇中记载
如果不主动书写构造函数,c++或默认提供一般构造函数,拷贝构造函数以及复制运算符的操作。
一般的构造函数没有任何参数,默认提供的该种构造函数不执行任何操作
默认提供的拷贝构造函数简单的将成员变量赋值
默认提供的复制运算也是简单的将成员变量赋值
假设有类A,3种初始化方法在代码中表现如下
A a(); 一般的构造函数(带参数的一般构造函数可以视作对a的重载)
A a(b); 拷贝构造函数
A a = c; 赋值运算
值得注意的是 如果有动态分配的类成员 那么应该重载拷贝构造函数和赋值运算符
主要是由于,默认的考培构造和=运算符都是简单的进行成员的复制,这样会导致两个对象的成员同时指向一块内存区域,两个成员粘滞在一起,改动了其中一个,另一个也会发生改变。所以必须重载这个函数以及运算符,保证每个对象的成员(动态分配)都有自己独立的空间。
关于如何对赋值运算符进行重载, 会在另一篇中记载
相关文章推荐
- C++ new的nothrow关键字和new_handler用法
- leetcode笔记:Excel Sheet Column Number
- nyoj17 单调递增最长子序列
- <<Effective C++>> 读书笔记6: 继承与面向对象设计
- C++去除文件名中的空格
- C++ 单链表基本操作分析与实现
- C++命名空间详解
- int 与 string 相互转换
- C++11系列-常量表达式
- C++11系列-区间迭代
- C++11系列-lambda函数
- C++11系列-改进的类型推导:auto、decltype和新的函数语法
- C++11系列-什么是C++11
- c语言中变量作用域的区别
- c++ getline
- C++写入txt文件方法
- C++中的随机数函数
- C++文件读写详解(ofstream,ifstream,fstream)
- c++ primer 学习笔记25 面向对象编程
- C/C++获得当前程序路径