浅谈C++中的构造函数分类及调用规则
2018-10-12 14:09
531 查看
构造函数的分类
这里简单地将C++中的构造函数分一下类,直接看下面的代码表达,说明在注释中:
#include <iostream> using namespace std; class Text { public: Text() // 无参数构造函数 { m_a = 0; m_b = 0; cout << "无参数构造函数" << endl; } Text(int a) // 有参数构造函数 { m_a = a; m_b = 0; cout << "无参数构造函数" << endl; } Text(int a, int b) // 有参数构造函数,有三种调用方法 { m_a = a; m_b = b; cout << "有参数构造函数" << endl; } // 赋值构造函数,也叫copy构造函数 Text(const Text& obj) { cout << "这也是构造函数" << endl; } ~Text(); private: int m_a; int m_b; }; int main() { // 1括号法 Text t1; // 调用无参数构造函数 // 2等号法 Text t2 = (3, 4, 5, 6, 7); // C++对等号进行了加强,c++编译器自动的调用构造函数 // 3直接调用构造函数,手动调用构造函数 Text t3 = Text(1, 2); // 这里涉及到匿名对象 return 0; }
构造函数调用规则研究
1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数
2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数
这里一定注意,当你只定义一个拷贝构造函数,在创建对象时是不能直接调用无参数构造函数的。
3) 当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数
当类中定义了一个多参数的构造函数,那么也是不存在无参数构造函数
4 )默认拷贝构造函数成员变量简单赋值
总结:只要你写了构造函数,那么你必须用。
也再次印证了拷贝构造函数也是构造函数,一定要注意这个易错点。
您可能感兴趣的文章:
相关文章推荐
- C++调用父类的构造函数规则
- c++ 构造函数 继承 调用规则
- C++构造函数调用规则
- C++之 构造函数调用规则
- C++基础:派生类的构造函数与析构函数调用顺序
- C++在类之间调用static_cast转换时,需要复制构造函数
- C++中构造函数与析构函数的调用顺序
- C++ 虚继承对基类构造函数调用顺序的影响
- C++中, 构造函数和析构函数能不能被显示调用?
- c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)
- c++ 构造函数中调用虚函数的实现方法
- C++中如果声明一个对象指针时,不会调用构造函数
- C++中构造函数与析构函数的调用顺序
- C++继承详解之二——派生类成员函数详解(函数隐藏、构造函数与兼容覆盖规则)
- C++ 类缺省构造函数调用带参数的构造函数
- 从一道题谈C++中构造函数调用构造函数
- c++中六种构造函数的实现以及9中情况下,构造函数的调用过程
- C++中构造函数调用构造函数
- [祥:]C++定义对象的时候调用默认的构造函数,各种形式
- 浅谈C++调用C#的DLL程序方法