Complex ( double d)
{
real =r;
image =0;
}
其作用是将double 类型的参数d转换成Complex类的对象。
转换构造函数:将一个其它类型的数据转换成一个类对象。只能有一个参数。
如:
c=c1+Complex(2.5);
============================
类型转换函数:
将一个类对象转换成另一个类型数据。只能是类的成员函数。
operator double()
{
return real;
}
比如:
c1=c2+d1
编译系统是怎么处理的了?先寻找有无对"+"的重载,当发现有operator+函数时,判断是否是友员函数还是类的成员函数,且对double参数的重载。没有的话,就再次寻找是否有operate double 类型转换函数来把c2转换成double.
没有的话,再次寻找有无转换构造函数,则会建立一个临时complex类对象,在调用operator+函数来实现类相加。
:c1=c2+Complex(d1).
=====================================
d=2.3+c3;:当发现没有operator+函数时,则寻找类型转换函数operator double,把类c3转换成double。
d=c2+2.3;
d= c1+c2; 当发现有operator+函数时,先把2个类相加,然后在寻找类型转换函数operator double,把类Complex(c3+c2)转换成double。
c3=c1+2.3;//当发现有operator+函数时,先去寻找转换构造函数Complex(doubel r){real=r},把c3=c1+Complex(2.3);
c3=2.3+c1;//同样先转换operator+(2.3,c1),发现有Complex(2.3),则operator(Complex(2.3),c1)
========================================
注:定义类型转换,可以减少 operator+ ... 运算符重载函数的数量。不用专门定义对应的:
friend Complex operator+(double, Complex &);
Complex operator+(double);
-------------------------------
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;image=0;}
Complex(double r){real =r;}
Complex(double r,double i):real(r),image(i){}
void display();
friend Complex operator+(Complex &,Complex &);
operator double()
{
return real;
}
private:
double real,image;
};
void Complex::display()
{
cout<<"real:"<<real<<" image:"<<image<<endl;
}
Complex operator+(Complex &c1,Complex &c2)
{
return Complex(c1.real+c2.real,c1.image+c2.image);
}
int main()
{
Complex c1(12.1,1),c2(1.1,2.3),c3;
c3=c1+c2;
c3.display();
double d;
d=2.3+c3;
cout<<"d:"<<d<<endl;
d= c1+c2;
cout<<"d:"<<d<<endl;
c3=c1+2.3;
c3.display();
return 0;
}
分享到:
相关推荐
在本实例中,我们将深入探讨四种主要类型的构造函数:默认构造函数、初始化构造函数、复制构造函数和转换构造函数。 首先,我们来讨论默认构造函数。默认构造函数是没有任何参数的构造函数,它通常用来创建一个不带...
// 先调用类型转换构造函数创建临时对象,再调用等号运算符重载 ``` - **复制构造函数的使用**: ```cpp Complex c5(c2); // 直接调用复制构造函数 Complex c4 = c2; // 等价于复制构造函数 ``` #### 四、...
构造函数可以分为四种:无参数构造函数、一般构造函数、复制构造函数和类型转换构造函数。 一、 构造函数的作用 构造函数的主要作用是初始化对象的数据成员。当编译系统为对象分配内存空间时,自动调用构造函数...
在C++中,构造函数可以分为四种:无参数构造函数、一般构造函数、复制构造函数和类型转换构造函数。 1. 无参数构造函数 无参数构造函数是一种特殊的构造函数,它们不需要任何参数。例如: ```cpp class Complex { ...
本文将深入探讨C++中的两种特殊构造函数——拷贝构造函数和转换构造函数,并提出在程序设计中可能遇到的问题及其解决方案。 #### 默认构造函数与用户定义的构造函数 C++规定每个类至少需要有一个构造函数。如果...
4. 显式类型转换构造函数:有时我们可能需要将一个其他类型的对象转换为类的实例。这种构造函数可以接受一个参数并将其转换为类的实例。使用`explicit`关键字可以防止隐式类型转换,以避免意外的自动转换。 ```cpp ...
类型转换构造函数允许将一个其他类型的值直接转换为类的对象。但有时这种隐式转换可能不是我们期望的,因此可以使用`explicit`关键字来阻止这种自动转换,强制进行显式类型转换。 5. **赋值运算符重载(=运算符...
在教学过程中,还可以探讨构造函数的其他形式,如拷贝构造函数,用于复制已有对象,以及转换构造函数,允许将类对象隐式转换为其他类型。此外,还可以讨论构造函数的重载,即在同一个类中定义多个构造函数,具有不同...
在C++编程中,数据结构是理解和操作复杂数据的关键,而C++的构造函数与析构函数以及类型转换则是实现高效、安全代码的重要概念。这个压缩包中的资源着重讲解了这些核心主题,通过实例代码帮助学习者深入理解。 首先...
本章节主要内容包括堆的概念、需要 new 和 delete 的原因、分配堆对象、拷贝构造函数、浅拷贝与深拷贝、临时对象、无名对象、构造函数用于类型转换等。 1. 关于堆 在 C++ 程序的内存格局中,堆区是动态分配的内存...
构造函数可以用于类型转换,例如将一个基本类型转换为一个类类型。构造函数的主要作用是将一个类型转换为另一个类型。 本资源摘要信息详细介绍了 C++ 程序设计中堆和拷贝构造函数的相关知识点,为读者提供了一个...
这种转换通常分为两种类型:转换构造函数和成员转换函数,这两种方法都遵循C++的隐式类型转换规则。 首先,转换构造函数是一种特殊的构造函数,它的作用是将非本类类型的对象转换成本类的对象。在给定的代码示例中...
说明了派生类与基类之间的构造函数的调用顺序……
在类层次结构中,构造函数还可以进行类型转换,允许一个类的对象作为其派生类的对象使用。例如,基类的构造函数可以通过传递适当的参数来创建派生类的对象。 析构函数是与构造函数相对应的特殊成员函数,它前有波浪...
在计算机等级考试二级C++的考点中,类的转换主要包括两种主要形式:转换构造函数和成员转换函数。 1. 转换构造函数: 转换构造函数是一种特殊的构造函数,它接受一个非同类类型的参数,并用于将这个参数转换为类的...
2. **隐式类型转换**:如果一个函数或方法期望一个对象作为参数,但传入的是一个对象的副本,此时会发生隐式类型转换,调用拷贝构造函数。 3. **返回对象**:当函数返回一个对象时,如果该对象不是引用或常量引用,...
例如,在上面的代码中,我们定义了一个类型转换构造函数Complex::Complex(double r),该函数将一个double类型的对象转换为一个Complex对象。 五、等号运算符重载 等号运算符重载是C++中的一种特殊函数,它的作用是...
除非不可避免,如要调用malloc()函数时要用的void型指针转换成指定类型指针。 四、标准输入输出流 在C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。 #include iostream.h ...
类型转换构造函数是指接收单个参数且该参数类型不同于类类型的构造函数。这类构造函数常用于将其他类型的对象转换为当前类的对象。为了防止不必要的隐式转换,可以在构造函数前加上`explicit`关键字。 **示例代码:...
在AS3中,有两种主要的方法来进行强制类型转换:`as`关键字和类型转换构造函数。 #### 二、使用`as`关键字进行强制类型转换 `as`关键字是AS3中最常用的强制类型转换方式。它的工作原理是尝试将一个对象转换为指定...