`

两种自动类型转换:构造函数与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++入门资料

    上面两个都是C风格的强制类型转换,C++还增加了一种转换方式,比较一下上面和下面这个书写方式的不同: long int el=123; short i=int (el); float m=34.56; int i=int (m); 使用强制类型转换的最大好处...

    摩托罗拉C++面试题

    子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等 15.为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果。 16.介绍一下模板和容器。如何...

    零起点学通C++多媒体范例教学代码

    11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1...

    零起点学通C++学习_多媒体范例教学代码

    11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 ...

    LuaBind 源码 (Lua增强库)

    你可以给构造函数设定一个名字,例如: module(L, "my_library") [ // declarations ]; 这里所有的申明都将被放置在 my_libary 表. 如果你想要嵌套名空间,你可以用 luabind::namespace_ 类. 它和 luabind::module ...

    C++ 小型复数计算器

    CComplex(double real=0,double image=0) //构造函数 { Real=real; Image=image; } friend istream & operator&gt;&gt;(istream &is,CComplex &com); //重载输入 friend ostream & operator(ostream &os,CComplex &com); /...

    语言程序设计课后习题答案

    在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。 2-8 什么叫做表达式?x = 5 + 7是一个...

    Qt智能指针--QWeakPointer.pdf

    } } 在构造函数中调⽤test()函数,执⾏完过后应该会⾃动释放parent和children对象,但是由于相互引⽤,在退出之前,引⽤计数为2,退出 之后引⽤计数还是1,所以导致不能⾃动释放,并且此时这两个对象再也⽆法访问到...

    C++MFC教程

    有两点坐标构造 下面介绍几个成员函数: int Width( ) const; 得到宽度 int Height( ) const; 得到高度 CSize Size( ) const; 得到尺寸 CPoint& TopLeft( ); 得到左上角坐标 CPoint& BottomRight( ); 得到右下...

    【。net 专业】 面试题

    第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 2.如何把一个array复制到arrayList里 foreach( object o in array )arrayList.Add(o); 3.datagrid.datasouse可以连接什么数据源 ...

    C++智能指针.pdf

    也可以使⽤直接初始化的⽅式 shared_ptr&lt;int&gt; pint(new int(100)) 来创建⼀个 shared_ptr 并初始化,但是由于 shared_ptr 定义 的构造函数是 explicit 的,因此不能使⽤ shared_ptr&lt;int&gt; pint = new int(100) 来...

    内存管理内存管理内存管理

    在大部分操作系统中,内存分配由以下两个简单的函数来处理: void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由...

    操作系统(内存管理)

    C 编程语言提供了两个函数来满足我们的三个需求: malloc:该函数分配给定的字节数,并返回一个指向它们的指针。如果没有足够的可用内存,那么它返回一个空指针。 free:该函数获得指向由 malloc 分配的内存片段...

    C# for CSDN 乱七八糟的看不懂

    C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 ...

Global site tag (gtag.js) - Google Analytics