码迷,mamicode.com
首页 > 编程语言 > 详细

c++语法:各种类型的构造函数

时间:2019-12-30 22:48:15      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:自动   拷贝构造   默认参数   其它   重载   实参   合并   box   语法   

总结出来的几种构造参数。

1) 默认构造函数。就是编译器自动生成的构造函数。以 Complex 类为例,它的原型为:

Complex();  //没有参数


2) 普通构造函数。就是用户自定义的构造函数。以 Complex 类为例,它的原型为:

Complex(double real, double imag);  //两个参数


3) 拷贝构造函数。在以拷贝的方式初始化对象时调用。以 Complex 类为例,它的原型为:

Complex(const Complex &c);


4) 转换构造函数。将其它类型转换为当前类类型时调用。以 Complex 为例,它的原型为:

Complex(double real);

#include <iostream>
using namespace std;
//复数类
class Complex{
public:
    Complex(): m_real(0.0), m_imag(0.0){ }
    Complex(double real, double imag): m_real(real), m_imag(imag){ }
    Complex(double real): m_real(real), m_imag(0.0){ }  //转换构造函数
public:
    friend ostream & operator<<(ostream &out, Complex &c);  //友元函数
private:
    double m_real;  //实部
    double m_imag;  //虚部
};
//重载>>运算符
ostream & operator<<(ostream &out, Complex &c){
    out << c.m_real <<" + "<< c.m_imag <<"i";;
    return out;
}
Complex c1();  //调用Complex()
Complex c2(10, 20);  //调用Complex(double real, double imag)
Complex c3(c2);  //调用Complex(const Complex &c)
Complex c4(25.7);  //调用Complex(double real)

简化合并版本,除了拷贝构造函数,其他的都合并在一起了。

 Complex(double real = 0.0, double imag = 0.0): m_real(real), m_imag(imag){ }
int main(){
    Complex a(10.0, 20.0);  //向构造函数传递 2 个实参,不使用默认参数
    Complex b(89.5);  //向构造函数传递 1 个实参,使用 1 个默认参数
    Complex c;  //不向构造函数传递实参,使用全部默认参数
    a = 25.5;  //调用转换构造函数(向构造函数传递 1 个实参,使用 1 个默认参数)
    return 0;
}

c++语法:各种类型的构造函数

标签:自动   拷贝构造   默认参数   其它   重载   实参   合并   box   语法   

原文地址:https://www.cnblogs.com/icehole/p/12121952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!