C++ 类型转换操作与操作符重载 operator type() 与 type operator()

  类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转
换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。
class CVImage
{
public :
    CVImage();
    explicit CVImage(unsigned int width, unsigned int height, unsigned short depth, unsigned short nChannels = 3);
    CVImage(CVImage& img);
    ~CVImage();

void ReleaseImage();
    int Resize(unsigned int width, unsigned int height, unsigned short depth, unsigned short nChannels = 3);
    
    operator IplImage*() { return m_image; };
    inline IplImage* GetImage() { return m_image; };

private:
    IplImage* m_image;
};
先来说下类型转换构造函数:C++中的explicit用来修饰类的构造函数,表明该构造函数是显示的,在调用有参数的构造函数
时需要显式调用:
    CVImage cImg = CVImage(640, 480, 8, 1);
    
    运算符重载操作:
    IplImage* operator() ()
    {
        return m_image;
    }

时间: 2024-10-07 06:57:08

C++ 类型转换操作与操作符重载 operator type() 与 type operator()的相关文章

【C/C++】操作符重载

常见问题 Q1. 下列运算符,在C++语言中不能重载的是( ). A. * B. ?: C. :: D. delete Q2. 编写类String的构造函数.析构函数和赋值函数. Q3. 复制构造函数与赋值运算符的区别是什么? Q4. 下述代码的输出结果是什么? 1 #include <iostream> 2 using namespace std; 3 class X 4 { 5 public: 6 X() { cout << "constructor" &l

拷贝构造,操作符重载

 拷贝构造 #include <iostream> #include <string.h> using namespace std; class mystring { public: char *s; public: mystring() { s = new char[1024]; cout << "mystring" << endl; } //拷贝构造 mystring(const mystring &it) { s= ne

C++--操作符重载 复数类

一.操作符重载 Q:下面的复数解决方案是否可行? class Complex { public: int a; int b; }; int main() { Complex c1={1,2}; Complex c2={3,4}; Complex c3=c1+c2; return 0; } 该段代码想要实现的是将两个复数类进行相加得出第三个类代码实现的运行结果由上面的结果图可以得知,出现的错误是无法匹配+号操作符的操作,同时出现 的潜在问题是a与b是public成员,在实际的操作中应将a与b设置为

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳、operator new 和 operator delete 实现一个简单内存泄漏跟踪器

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳.operator new 和 operator delete 实现一个简单内存泄漏跟踪器 一.转换构造函数 可以用单个实参来调用的构造函数定义从形参类型到该类型的一个隐式转换.如下: class Integral { public: Integral (int = 0); //转换构造函数 private: int real; }; Integral A = 1; //调用转换构造函数将1转换为In

[C/C++]_[操作符重载operator type()和operator()的区别]

场景: 1.看到WTL的CWindow源码时会发现这样的operator重载,仔细看会发现它并不是重载()操作符. operator HWND() const throw() { return m_hWnd; } 如果重载()操作符,应该是,返回值HWND应该在operator的左边,而且应该有两个括号() HWND operator ()() const throw() { return m_hWnd; } 这种类型的操作符重载应该是type conversion operator(类型转换操

Kotlin操作符重载:把标准操作加入到任何类中(KAD 17)

作者:Antonio Leiva 时间:Mar 21, 2017 原文链接:https://antonioleiva.com/operator-overload-kotlin/ 就像其他每种语言一样,在Kotlin中,已经预定义了一些操作符执行一定的操作. 最典型的是加(+),减(-),乘(*),除(/),而且还有很多. 类似Java这样的一些语言,这些操作符被限制在一些特定的数量类型上,且没有方法让其他类型数据使用这些操作符. 还有在像Scala这样的其他语言中,由于函数名称可接受任何符号,我

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、-&gt;运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

操作符重载operator

发现一篇好文: 转载: 本文主要整理自C++之运算符重载及C++运算符重载总结. 什么是运算符重载 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生.如:   在这个程序里"+"既完成两个整形数的加法运算,又完成了双精度型的加法运算.为什么同一个运算符"+"可以用于完成不同类型的数据的加法运算?这是因为C++针对预定义基本数据类型已经对"+"运算符做了适当的重载.在编译程序编译不同类型数据的加法表达式时

21.C++- ++操作符重载、隐式转换之explicit关键字、类的类型转换函数

++操作符重载 ++操作符分为前置++和后置++,比如: ++a;  a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 前置++操作符的返回值为*this 后置++操作符的返回值为临时对象 例如: 转换规则如下所示: 比如: 隐式转换的隐患 隐式转换有时会因为类型不同,得到的结果大有不同,也是常见bug之一. 参考以下示例: 运行打印: 答案并非是-1000. 同样,我们使用构造函数时,也经常使用隐式转换 参考以下示