`

两种自动类型转换:构造函数与operator

    博客分类:
  • c++
F# 
阅读更多
如果有两个对象:one, two, 要想把one转换成为two,有两种方法:
在one在定义operator two() const函数
在two在增加two(const one&)构造函数
一般只能使用其中一种情况,而不能两种一起使用。

operator:

#include <iostream>
using std::cout;
using std::endl;

class two {
    int iTwo;
public:
    two(int a = 0) : iTwo(a) {}
    void print() const {
        cout << "two is: " << iTwo << endl;
    }
};

class one {
    int iOne;
public:
    one(int a = 0) : iOne(a) {}
    operator two() const {
        return two(iOne);
    }
};

void f(const two& t) {
    t.print();
}

int main() {
    one o(143);
    f(o);
}

构造函数转换:

#include <iostream>
using std::cout;
using std::endl;
class one {
    int iOne;
public:
    one(int a = 0) : iOne(a) {}
    int getValue() const {
        return iOne;
    }

};

class two {
    int iTwo;
public:
    two(int a = 0) : iTwo(a) {}
    two(const one& o) {
        iTwo = o.getValue();
    }
    void print() const {
        cout << "two is :" << iTwo << endl;
    }
};

void f(const two& t) {
    t.print();
}

int main() {
    one one(222);
    f(one);
}
分享到:
评论

相关推荐

    C++构造函数详解及显式调用构造函数.pdf

    类型转换构造函数是一种特殊的构造函数,根据一个指定的类型的对象创建一个本类的对象。例如,以下代码中,定义了一个类型转换构造函数。 class Complex { private: double m_real; double m_imag; public: ...

    类的转换C++的内部数据类型遵循隐式类型转换规则

    这种转换通常分为两种类型:转换构造函数和成员转换函数,这两种方法都遵循C++的隐式类型转换规则。 首先,转换构造函数是一种特殊的构造函数,它的作用是将非本类类型的对象转换成本类的对象。在给定的代码示例中...

    计算机等级考试二级C++考点:类的转换.docx

    在计算机等级考试二级C++的考点中,类的转换主要包括两种主要形式:转换构造函数和成员转换函数。 1. 转换构造函数: 转换构造函数是一种特殊的构造函数,它接受一个非同类类型的参数,并用于将这个参数转换为类的...

    数据类型转换的整理,

    在编程领域,数据类型转换是不可或缺的一个环节,尤其是在C语言和C++这两种广泛使用的编程语言中。数据类型转换涉及到将一个数据类型的数据转化为另一种数据类型,以满足特定的计算或存储需求。本篇文章将深入探讨...

    C++中Operator类型强制转换成员函数解析

    3. 转换函数通常没有参数,也没有直接的返回值,但会通过`return`语句返回目标类型的数据,或者调用目标类型的构造函数。 类型转换函数分为两类: 1. 对象向基本数据类型转换:例如,我们可以定义一个类`D`,包含一...

    C++隐式类型转换运算符operator type()用法详解

    C++隐式类型转换运算符operator type()是一种特殊的成员函数,用于实现类型转换的自动转换。这种运算符可以将一个类对象转换为其他类型,例如基本数据类型、自定义类类型等。 operator type()的定义格式为:...

    c/c++拷贝构造函数和关键字explicit详解

    在C++中,关键字`explicit`可以应用于两种情况:构造函数和转换函数。对于构造函数,`explicit`关键字表示该构造函数不能被隐式调用,例如`explicit Test(int d):data(d)`。对于转换函数,`explicit`关键字表示该...

    C++ 中构造函数的实例详解

    例如,在上面的代码中,我们定义了一个类型转换构造函数Complex::Complex(double r),该函数将一个double类型的对象转换为一个Complex对象。 五、等号运算符重载 等号运算符重载是C++中的一种特殊函数,它的作用是...

    面向对象课程设计——分数类的设计与实现

    构造函数是类的一个特殊成员函数,它在创建对象时自动调用。在这里,我们需要三个构造函数: - 默认构造函数(无参数),设置分子和分母都为1。 - 单参数构造函数(一个整数),这个整数作为分子,分母设为1。 -...

    C++与操作系统等面试题9

    类型转换构造函数是指接收单个参数且该参数类型不同于类类型的构造函数。这类构造函数常用于将其他类型的对象转换为当前类的对象。为了防止不必要的隐式转换,可以在构造函数前加上`explicit`关键字。 **示例代码:...

    c++ 运算符重载和转换

    1. 隐式类型转换:通过构造函数或者赋值兼容规则自动进行。但在重载运算符时应谨慎使用,避免出现意外的类型转换或精度损失。 2. 显式类型转换:包括`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_...

    面向对象程序设计英文教学课件:07-Operator-Overload.pptx

    例如,如果有一个Circle类并且我们尝试将一个double值与Circle对象相加(如circle1 = circle1 + 10.0),编译器会自动寻找一个接受double参数的Circle构造函数,将10.0转换为Circle对象,然后进行加法运算。这种转换...

    C++ Primer 第十四章 重载操作符与转换 思维导图笔记

    这种构造函数称为转换构造函数,它允许类的对象被视为其他类型。 3. **转换运算符**:类还可以通过定义一个返回所需类型的成员函数来实现显式类型转换。这个函数必须是静态的,并且没有返回类型,通常以`operator`...

    new操作符(new operator)和operator new的区别

    `new`操作符负责将`operator new`返回的内存地址传递给构造函数,完成对象的初始化。 例如,对于以下代码: ```cpp string *ps = new string("Memory Management"); ``` 编译器实际上会生成类似以下的步骤: 1. ...

    C++语言应用中的若干问题与对策

    C++提供了两种类型转换的方式:隐式转换和显式转换。 - **隐式转换**:由编译器自动完成,适用于基本数据类型之间的转换。 - **显式转换**:由程序员通过`static_cast`、`dynamic_cast`等关键字手动完成。 对于...

    第六次上机题目及参考代码.docx

    // 构造函数和析构函数 Rational(int p = 0, int q = 1) : numerator(p), denominator(q) { simplify(); } ~Rational() {} // 约分 void simplify(); // 运算符重载 Rational operator+(const Rational& ...

    分数类中的操作符重载

    这可以通过在分数类中添加一个构造函数,接受一个整数并将其作为分子,分母设为1,或者通过重载操作符使整数可以隐式转换为分数对象来实现。 在`fraction`文件中,可能包含了这个分数类的实现细节,包括类定义、...

    cpp_type_convert.docx

    在C++中,类型转换分为隐式转换和显式转换两大类,每种转换都有其特定的规则和应用场景。 1. **隐含类型转换**: - **标准转换**:这是最基础的隐式转换,如描述中提到的`short`到`int`的提升。当两个类型兼容且...

    C++ 赋值构造函数注意点介绍

    在C++编程语言中,赋值构造函数是一个特殊类型的构造函数,它的主要任务是对对象进行初始化时使用已存在的对象的值。赋值构造函数通常在需要复制或移动对象的值时被调用,例如在赋值操作符"="被使用时。下面是关于...

    C++高级编程1

    非显式单参数构造函数(如`Fraction(int num, int den=1)`)可以用于将其他类型(如`int`)隐式转换为类类型。然而,如果加上`explicit`关键字(如`explicit Fraction(int num)`),编译器就不会自动进行隐式类型...

Global site tag (gtag.js) - Google Analytics