关于C++ 构造函数的那点小事
2013-10-10 10:00
169 查看
先列出来c++中所有的构造函数
1、默认构造函数和带参数的构造函数 我们暂且称他们为“普通构造函数” .eg Test(); or Test(int i, ...);
2、拷贝构造函数Test(const Test & t);
3、类型转换构造函数 Test(int i);
一、普通构造函数
1、这里我们主要讲一下默认构造函数的生命周期:即它什么时候会出现?
答:通常在一个类中,如果我们没有给出任何类型的构造函数,那么这个默认的构造函数就会由编译器自动生成。
反之,如果程序员给出了任何一种类型的构造函数,那么编译器是不会为我们生成默认构造函数的(这一点适用于所有构造函数)
看下面这个例子:
由于在类体中,我们给出了一种类型的构造函数,那么编译器就不会再帮助我们自动生成默认构造函数了,所以在main函数中,我们想要通过调用默认构造函数的方式来创建一个对象是错误的:对‘Test::Test()’的调用没有匹配的函数
2、改变:
(1)如果我们把普通构造函数放到private里面,会产生什么效果?
二、拷贝构造函数
顾名思义,拷贝构造函数就是当你打算用一个已经存在的对象,去找葫芦画瓢再创建一个对象时,新对象调用的构造函数.
1、细节
(1)我们做一些有意思的改变:如果我们把拷贝构造函数设置成私有的会怎么样?
eg:
在main函数中,我们这样使用:
编译,报错:‘Test::Test(const Test&)’是私有的
是了,我们在类外部,用对象t去拷贝构造t2,这个时候,t2会调用拷贝构造函数,而拷贝构造函数是私有的,在类外部调用是非法的。
所以,把拷贝构造函数设置成私有的效果就是,在类外部不能进行对象的拷贝
三、类型转换构造函数、
1、细节:
(1)通常有且只有一个参数的构造函数是类型转换构造函数,但有一个参数的构造函数也可以不是类型转换构造函数,eg:可以是普通构造函数,甚至拷贝构造函数都是只有一个构造函数。
1、默认构造函数和带参数的构造函数 我们暂且称他们为“普通构造函数” .eg Test(); or Test(int i, ...);
2、拷贝构造函数Test(const Test & t);
3、类型转换构造函数 Test(int i);
一、普通构造函数
1、这里我们主要讲一下默认构造函数的生命周期:即它什么时候会出现?
答:通常在一个类中,如果我们没有给出任何类型的构造函数,那么这个默认的构造函数就会由编译器自动生成。
反之,如果程序员给出了任何一种类型的构造函数,那么编译器是不会为我们生成默认构造函数的(这一点适用于所有构造函数)
看下面这个例子:
#include <iostream> using namespace std; class Test { public: Test(int iCounter); private: int m_iCounter; }; Test :: Test(int iCounter) { m_iCounter = iCounter; } int main() { Test test; return 0; }
由于在类体中,我们给出了一种类型的构造函数,那么编译器就不会再帮助我们自动生成默认构造函数了,所以在main函数中,我们想要通过调用默认构造函数的方式来创建一个对象是错误的:对‘Test::Test()’的调用没有匹配的函数
2、改变:
(1)如果我们把普通构造函数放到private里面,会产生什么效果?
二、拷贝构造函数
顾名思义,拷贝构造函数就是当你打算用一个已经存在的对象,去找葫芦画瓢再创建一个对象时,新对象调用的构造函数.
1、细节
(1)我们做一些有意思的改变:如果我们把拷贝构造函数设置成私有的会怎么样?
eg:
class Test { public: Test(); private: Test(const Test & t); };
在main函数中,我们这样使用:
int main() { Test t; Test t2 = t; return 0; }
编译,报错:‘Test::Test(const Test&)’是私有的
是了,我们在类外部,用对象t去拷贝构造t2,这个时候,t2会调用拷贝构造函数,而拷贝构造函数是私有的,在类外部调用是非法的。
所以,把拷贝构造函数设置成私有的效果就是,在类外部不能进行对象的拷贝
三、类型转换构造函数、
1、细节:
(1)通常有且只有一个参数的构造函数是类型转换构造函数,但有一个参数的构造函数也可以不是类型转换构造函数,eg:可以是普通构造函数,甚至拷贝构造函数都是只有一个构造函数。
相关文章推荐
- c++学习 关于类的构造函数
- C++:关于构造函数
- 关于c++中构造函数的知识
- 关于C++中构造函数初始化成员列表的总结
- 关于C++中构造函数的说明
- C++:关于构造函数
- [c++ primer plus]c++ compiler缺省生成了哪些构造函数?关于构造函数的注意事项。
- 关于C++构造函数的FAQ
- C++继承中关于子类构造函数的写法
- 关于C++中的构造函数的一点总结
- C++继承中关于子类构造函数
- 关于C++中构造函数的调用顺序
- 关于C++的构造函数, 复制构造函数 和 operator =
- 关于c++构造函数、析构函数在全局实例(global)和在局部实例先后顺序
- c++ 关于构造函数 和 复制构造函数
- 一道关于C++ 的面试题目(继承、构造函数以及析构函数)
- 关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明
- 关于C++构造函数的FAQ
- 关于C++构造函数初始化顺序
- 关于C++子类在继承父类的构造函数时的一些情况