首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

二个概念不清楚,求解释。关于强制类型转换的

2013-09-28 
2个概念不清楚,求解释。关于强制类型转换的。第一: 这句话我怎么理解的别扭,谁帮我通俗的解释一下:接受一个

2个概念不清楚,求解释。关于强制类型转换的。
第一: 这句话我怎么理解的别扭,谁帮我通俗的解释一下:
  "接受一个参数的构造函数为将类型与该参数相同的值转换为类提供的蓝图"

第二个问题:
 比如有一个类 classa.
classa b(88); 他等同与 classa b; b=88;
我的疑问是这里把88强制类型转换了?把88转换为classa类了?不对吧?可是书上好像就是这么说的。看的迷糊。

[解决办法]
1.
不清楚要说啥。
看来无非是接受一个参数的非explicit构造函数可以作为转换时的重载候选么。
2.
完全不一样。
classa b(88); //要求有接受int的构造函数。用88直接初始化classa对象b。
classa b = 88; //要求有接受int的非explicit构造函数。用88复制初始化class对象b。
classa b; b=88; //要求有默认构造函数。直接默认初始化b,之后对b赋值为88。

引用:
第一个问题看着就但蛋疼,不回答了,
第二个问题
b= 88相当于b = new classa(88);

不回答也就算了,回答的部分特么还纯扯蛋。

[解决办法]
引用:
FrankHB1989 谢谢你。你说的概念我理解。我不理解的是 
比如
classa(double lbs)
“用于将double 类型的值转换为classa 类型。”--------这句话我不明白。

double lbs 哪怕被转换成为int类型我都可以接受。但是怎么会转换为一个classa类型呢。(classa是一个类)

classa(double lbs) 首先这应该是一个构造函数,其次这里面所说的转换,其实是广义的转换。
也就是说你传入了lbs,结果产生了一个classa对象,仅此而已。不过是意义的转换。
[解决办法]
引用:
FrankHB1989 谢谢你。你说的概念我理解。我不理解的是 
比如
classa(double lbs)
“用于将double 类型的值转换为classa 类型。”--------这句话我不明白。

double lbs 哪怕被转换成为int类型我都可以接受。但是怎么会转换为一个classa类型呢。(classa是一个类)


涉及类类型的转换有特定规则。通过构造函数或转换函数这两类用户定义的转换是其它类型没有的。想象一下x = classa(0.0)——或者x = (classa)0.0这样的情况就不难理解和内建转换的相似性。同样,对应的初始化当然也是转换。

WG21/N3691
12.3 Conversions [class.conv]
1 Type conversions of class objects can be specified by constructors and by conversion functions. These conversions are called user-defined conversions and are used for implicit type conversions (Clause 4), for initialization (8.5), and for explicit type conversions (5.4, 5.2.9).
12.3.1 Conversion by constructor [class.conv.ctor]
1 A constructor declared without the function-specifier explicit specifies a conversion from the types of its
parameters to the type of its class. Such a constructor is called a converting constructor. [ Example:
struct X {
X(int);
X(const char*, int =0);
X(int, int);
};
void f(X arg) {
X a = 1; // a = X(1)
X b = "Jessie"; // b = X("Jessie",0)
a = 2; // a = X(2)
f(3); // f(X(3))
f({1, 2}); // f(X(1,2))
}
—end example ]


[解决办法]
可以看看这个,希望能够对你有点启发!http://blog.csdn.net/cloume/article/details/9369429
[解决办法]
应该是有赋值操作符(=)重载吧:classa& operator = (int right)

热点排行