如果有两个对象: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);
}
在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);
}
发表评论
-
const 与static 关键词在c 和 c++中的作用
2012-08-11 11:49 998一.C语言中的const ... -
error LNK2005 and error LNK2019
2012-08-09 23:08 1174error LNK2005 and error LNK2019 ... -
LIBCD.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSV
2012-08-07 09:20 1442LIBCD.lib(crt0dat.obj) : error ... -
在VS2010下配置VC++ Directories
2012-08-07 08:29 10981:可以 在“class View” 面板 -> 右 ... -
零星笔记,待整理
2010-11-01 13:00 510//用 getline 函数从输入读取整行内容。然后为 ... -
VC: error LNK2019:unresolved external symbol *** referenced in function ***的解决方案
2010-10-30 21:13 2140当头文件中声明了一个函数,但是在相应的源文件中却没有对该函数进 ... -
stdcall cdecl fastcall thiscall naked call的具体含义
2010-10-30 18:54 983在C语言中,假设我们有 ... -
#define总结 (网上资料汇集)
2010-10-30 08:06 7441. 定义简单的常数:定义常量,便于修改(切不可在后面加上分号 ... -
(zz)编译与使用Qt4,Visual Studio Express 2008
2010-10-14 22:35 1409一、Qt版本 我现在用的是4.5.2。好像前段时间4.6出来 ... -
strcat 内部实现
2010-09-21 00:43 1828char * strcat(char * dest, ... -
deep copy & shallow copy
2010-09-15 19:27 852A shallow copy of an object cop ... -
reinterpret_cast的本质(转)
2010-09-14 23:15 1644先看看下面的代码: #include <iostr ... -
C++ 经典书籍
2010-09-14 16:18 1723下载地址: http://www.51cnnet.net/di ... -
内存对齐的规则以及作用
2010-09-14 00:14 708首先由一个程序引入话 ... -
[转]C++ reinterpret_cast,const_cast等 显式类型转换总结
2010-09-13 23:23 1053#include<iostream.h> ... -
C++提供了四种新的类型强制
2010-09-13 23:13 719static_cast const_cast reinte ... -
C++著名程序库的比较和学习经验
2010-09-13 19:30 8611、C++各大有名库的介绍——C++标准库 2、C++各大有名 ... -
c++ library and resource List
2010-09-13 18:56 9301,前言 无数次听 ... -
C++中操作符operator的两种用法
2010-09-12 02:23 11481.operator overloading C++可能通过o ... -
C++中的类拷贝构造函数和模板拷贝构造函数
2010-09-11 20:53 3034类(包括模板类)构造函数是真实的构造函数;然而模板构造函数,其 ...
相关推荐
类型转换构造函数是一种特殊的构造函数,根据一个指定的类型的对象创建一个本类的对象。例如,以下代码中,定义了一个类型转换构造函数。 class Complex { private: double m_real; double m_imag; public: ...
这种转换通常分为两种类型:转换构造函数和成员转换函数,这两种方法都遵循C++的隐式类型转换规则。 首先,转换构造函数是一种特殊的构造函数,它的作用是将非本类类型的对象转换成本类的对象。在给定的代码示例中...
在计算机等级考试二级C++的考点中,类的转换主要包括两种主要形式:转换构造函数和成员转换函数。 1. 转换构造函数: 转换构造函数是一种特殊的构造函数,它接受一个非同类类型的参数,并用于将这个参数转换为类的...
在编程领域,数据类型转换是不可或缺的一个环节,尤其是在C语言和C++这两种广泛使用的编程语言中。数据类型转换涉及到将一个数据类型的数据转化为另一种数据类型,以满足特定的计算或存储需求。本篇文章将深入探讨...
3. 转换函数通常没有参数,也没有直接的返回值,但会通过`return`语句返回目标类型的数据,或者调用目标类型的构造函数。 类型转换函数分为两类: 1. 对象向基本数据类型转换:例如,我们可以定义一个类`D`,包含一...
C++隐式类型转换运算符operator type()是一种特殊的成员函数,用于实现类型转换的自动转换。这种运算符可以将一个类对象转换为其他类型,例如基本数据类型、自定义类类型等。 operator type()的定义格式为:...
在C++中,关键字`explicit`可以应用于两种情况:构造函数和转换函数。对于构造函数,`explicit`关键字表示该构造函数不能被隐式调用,例如`explicit Test(int d):data(d)`。对于转换函数,`explicit`关键字表示该...
例如,在上面的代码中,我们定义了一个类型转换构造函数Complex::Complex(double r),该函数将一个double类型的对象转换为一个Complex对象。 五、等号运算符重载 等号运算符重载是C++中的一种特殊函数,它的作用是...
构造函数是类的一个特殊成员函数,它在创建对象时自动调用。在这里,我们需要三个构造函数: - 默认构造函数(无参数),设置分子和分母都为1。 - 单参数构造函数(一个整数),这个整数作为分子,分母设为1。 -...
类型转换构造函数是指接收单个参数且该参数类型不同于类类型的构造函数。这类构造函数常用于将其他类型的对象转换为当前类的对象。为了防止不必要的隐式转换,可以在构造函数前加上`explicit`关键字。 **示例代码:...
1. 隐式类型转换:通过构造函数或者赋值兼容规则自动进行。但在重载运算符时应谨慎使用,避免出现意外的类型转换或精度损失。 2. 显式类型转换:包括`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_...
例如,如果有一个Circle类并且我们尝试将一个double值与Circle对象相加(如circle1 = circle1 + 10.0),编译器会自动寻找一个接受double参数的Circle构造函数,将10.0转换为Circle对象,然后进行加法运算。这种转换...
这种构造函数称为转换构造函数,它允许类的对象被视为其他类型。 3. **转换运算符**:类还可以通过定义一个返回所需类型的成员函数来实现显式类型转换。这个函数必须是静态的,并且没有返回类型,通常以`operator`...
`new`操作符负责将`operator new`返回的内存地址传递给构造函数,完成对象的初始化。 例如,对于以下代码: ```cpp string *ps = new string("Memory Management"); ``` 编译器实际上会生成类似以下的步骤: 1. ...
C++提供了两种类型转换的方式:隐式转换和显式转换。 - **隐式转换**:由编译器自动完成,适用于基本数据类型之间的转换。 - **显式转换**:由程序员通过`static_cast`、`dynamic_cast`等关键字手动完成。 对于...
// 构造函数和析构函数 Rational(int p = 0, int q = 1) : numerator(p), denominator(q) { simplify(); } ~Rational() {} // 约分 void simplify(); // 运算符重载 Rational operator+(const Rational& ...
这可以通过在分数类中添加一个构造函数,接受一个整数并将其作为分子,分母设为1,或者通过重载操作符使整数可以隐式转换为分数对象来实现。 在`fraction`文件中,可能包含了这个分数类的实现细节,包括类定义、...
在C++中,类型转换分为隐式转换和显式转换两大类,每种转换都有其特定的规则和应用场景。 1. **隐含类型转换**: - **标准转换**:这是最基础的隐式转换,如描述中提到的`short`到`int`的提升。当两个类型兼容且...
在C++编程语言中,赋值构造函数是一个特殊类型的构造函数,它的主要任务是对对象进行初始化时使用已存在的对象的值。赋值构造函数通常在需要复制或移动对象的值时被调用,例如在赋值操作符"="被使用时。下面是关于...
非显式单参数构造函数(如`Fraction(int num, int den=1)`)可以用于将其他类型(如`int`)隐式转换为类类型。然而,如果加上`explicit`关键字(如`explicit Fraction(int num)`),编译器就不会自动进行隐式类型...