需要帮助铸造操作员...... [英] need help with casting operators...

查看:77
本文介绍了需要帮助铸造操作员......的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两种对象类型ClassA和ClassB


class ClassA {

public:

int data;

运算符ClassB()

{

ClassB b;

b.data = data + 1;

返回(b);

}

};


类ClassB {

public:

int data;

运算符ClassA()

{

ClassB b;

b.data =数据 - 1;

返回(b);

}

}


所以...如果我说:


ClassA a1,a2;

ClassB b;


a1.data = 5;

b = a1;

a2 = b;


然后a2应与a1相同和b应该是6.


首先我无法编译,因为ClassB在编译时不知道ClassA

.. 。


是否必须在两个类中都有int数据或者A可以继承B

反之亦然?


两个铸造运营商都可以只在课堂上?


我猜这非常类似于:


浮动a1,a2;

int b;

a1 = 5.0

b = a1;

a2 = b;


当然在这种情况下会失去优点..但是铸造

操作工作......


帮助?

TIA

解决方案

JustSomeGuy写道:

我有两种对象类型ClassA和ClassB

< snip>
首先我无法编译,因为ClassB在编译时并不知道ClassA

是否需要在两个类中都有int数据,或者A可以从B继承而反之亦然?

两个类的转换运算符只能存在于类中吗?



< snip>


我修复了一些逻辑错误(ClassB'的运算符ClassA返回了一个

ClassB):


class ClassB;


class ClassA {

public:

int data;

operator ClassB();

};


class ClassB {

public:

int data;

运算符ClassA();

};


ClassA ::运算符ClassB()

{

ClassB b;

b.data =数据+ 1;

返回(b);

}


ClassB ::运算符ClassA()

{

ClassA a;

a.data = data - 1;

返回(a);

}


int main()

{

ClassA a1,a2;

ClassB b;


a1.data = 5;

std :: cout< < a1.data == << a1.data<< std :: endl;


b = a1;

std :: cout<< b.data == << b.data<< std :: endl;


a2 = b;

std :: cout<< a2.data == << a2.data<< std :: endl;


返回0;

}


- Pete


JustSomeGuy写道:

我有两个对象类型ClassA和ClassB

类ClassA {
public:
int data ;
运营商ClassB()
{
ClassB b;
b.data = data + 1;
return(b);
}

类公开:
int数据;
运算符ClassA()
{B> B B; b.data = data - 1;
return(b);


你可能意味着


ClassA a;

a.data = data - 1;

返回a;


}
}


;

所以......如果我说:

ClassA a1,a2;
ClassB b;

a1.data = 5;
b = a1;
a2 = b;

然后a2应该与a1相同,b应该是6.

首先我不能把它编译好,因为ClassB不是在编译时知道ClassA
...


是的,那就是你需要将类定义和成员分开的地方

函数定义:


struct B;

struct A {

int data;

运算符B()const ;

};

struct B {

int data;

运算符A()const;

};

A :: operator B()const

{

...

}

B ::运算符A()const

{

...

}

是否必要在两个类中都有int数据,或者A可以从B继承
,反之亦然?


继承?取决于你的模型。

两个演员都可以只存在于类中吗?


No.

我猜这非常类似于:

浮动a1,a2;
int b;
a1 = 5.0
b = a1;
a2 = b;

在这种情况下,当然会失去优点..但铸造
操作工作...




这是因为语言已知转换操作符。


Victor


" JustSomeGuy" <否*** @ ucalgary.ca>在消息中写道

news:40 *************** @ ucalgary.ca ...

我有两个对象类型ClassA和ClassB

类ClassA {
公共:
int数据;
运营商ClassB()
{B> B B;
b.data = data + 1;
返回(b);
}
};

类ClassB {
public:
int数据;
运营商ClassA()
{B>阶段b;
b.data =数据 - 1;
返回(b);
}
}

所以...如果我说:

ClassA a1,a2;
ClassB b;

a1.data = 5;
b = a1;
a2 = b;

然后a2应该与a1相同,b应该是6.

首先关闭我无法编译,因为ClassB在编译时不知道ClassA

是否需要在两个类中都有int数据或者A继承自B
反之亦然?

可以机器人h铸造操作员只存在于类中?

我猜这非常类似于:

浮动a1,a2;
int b;
a1 = 5.0
b = a1;
a2 = b;

当然在这种情况下有一种损失的优点..但是铸造
操作工作......




#include< iostream>

#include< ostream>


B级;


A级

{

int数据;


public:

A(int d = 0):data(d){}

operator B()const;

friend std: :ostream的&安培; operator<<(std :: ostream& os,const A& a)

{

return os<< a.data;

}

};


B级

{

int data;


public:

B(int d = 0):data(d){}

运算符A()const {return data - 1; }

朋友std :: ostream& operator<<(std :: ostream& os,const B& b)

{

return os<< b.data;

}

};


A :: operator B()const {return data + 1; }


int main()

{

A a1(5);

A a2 ;

B b;


b = a1;

a2 = b;


std :: cout<< a1 == << a1<< ''\ n''

<< a2 == << a2<< ''\ n''

<< b == << b<< ''\ n'';


返回0;

}


输出:


a1 == 5

a2 == 5

b == 6

-Mike


I have two object types ClassA and ClassB

class ClassA {
public:
int data;
operator ClassB()
{
ClassB b;
b.data = data + 1;
return (b);
}
};

class ClassB {
public:
int data;
operator ClassA()
{
ClassB b;
b.data = data - 1;
return(b);
}
}

So... If I say:

ClassA a1, a2;
ClassB b;

a1.data = 5;
b = a1;
a2 = b;

then a2 should be identical to a1 and b should be 6.

First off I can''t get this to compile because ClassB isn''t know ClassA
at compile time...

Is it necesary to have int data in both classes or can A inherit from B
and vise versa?

Can both the casting operators exist in only on of the classes?

I guess this is very similar to:

float a1, a2;
int b;
a1 = 5.0
b = a1;
a2 = b;

Of course there is a loss of percision in this case.. but the casting
operations work...

help?
TIA

解决方案

JustSomeGuy wrote:

I have two object types ClassA and ClassB
<snip>
First off I can''t get this to compile because ClassB isn''t know ClassA
at compile time...

Is it necesary to have int data in both classes or can A inherit from
B and vise versa?

Can both the casting operators exist in only on of the classes?


<snip>

I fixed a few logic errors also (ClassB''s operator ClassA returned a
ClassB):

class ClassB;

class ClassA {
public:
int data;
operator ClassB();
};

class ClassB {
public:
int data;
operator ClassA();
};

ClassA::operator ClassB()
{
ClassB b;
b.data = data + 1;
return (b);
}

ClassB::operator ClassA()
{
ClassA a;
a.data = data - 1;
return(a);
}

int main()
{
ClassA a1, a2;
ClassB b;

a1.data = 5;
std::cout << "a1.data == " << a1.data << std::endl;

b = a1;
std::cout << "b.data == " << b.data << std::endl;

a2 = b;
std::cout << "a2.data == " << a2.data << std::endl;

return 0;
}

- Pete


JustSomeGuy wrote:

I have two object types ClassA and ClassB

class ClassA {
public:
int data;
operator ClassB()
{
ClassB b;
b.data = data + 1;
return (b);
}
};

class ClassB {
public:
int data;
operator ClassA()
{
ClassB b;
b.data = data - 1;
return(b);
You probably meant

ClassA a;
a.data = data - 1;
return a;

}
}
;

So... If I say:

ClassA a1, a2;
ClassB b;

a1.data = 5;
b = a1;
a2 = b;

then a2 should be identical to a1 and b should be 6.

First off I can''t get this to compile because ClassB isn''t know ClassA
at compile time...
Yes, that''s where you need to separate class definitions and member
function definitions:

struct B;
struct A {
int data;
operator B() const;
};
struct B {
int data;
operator A() const;
};
A::operator B() const
{
...
}
B::operator A() const
{
...
}

Is it necesary to have int data in both classes or can A inherit from B
and vise versa?
Inherit? Depends on your model.

Can both the casting operators exist in only on of the classes?
No.

I guess this is very similar to:

float a1, a2;
int b;
a1 = 5.0
b = a1;
a2 = b;

Of course there is a loss of percision in this case.. but the casting
operations work...



It''s because the conversion operators are known to the language.

Victor


"JustSomeGuy" <No***@ucalgary.ca> wrote in message
news:40***************@ucalgary.ca...

I have two object types ClassA and ClassB

class ClassA {
public:
int data;
operator ClassB()
{
ClassB b;
b.data = data + 1;
return (b);
}
};

class ClassB {
public:
int data;
operator ClassA()
{
ClassB b;
b.data = data - 1;
return(b);
}
}

So... If I say:

ClassA a1, a2;
ClassB b;

a1.data = 5;
b = a1;
a2 = b;

then a2 should be identical to a1 and b should be 6.

First off I can''t get this to compile because ClassB isn''t know ClassA
at compile time...

Is it necesary to have int data in both classes or can A inherit from B
and vise versa?

Can both the casting operators exist in only on of the classes?

I guess this is very similar to:

float a1, a2;
int b;
a1 = 5.0
b = a1;
a2 = b;

Of course there is a loss of percision in this case.. but the casting
operations work...



#include <iostream>
#include <ostream>

class B;

class A
{
int data;

public:
A(int d = 0) : data (d) { }
operator B() const;
friend std::ostream& operator<<(std::ostream& os, const A& a)
{
return os << a.data;
}
};

class B
{
int data;

public:
B(int d = 0) : data (d) { }

operator A() const { return data - 1; }
friend std::ostream& operator<<(std::ostream& os, const B& b)
{
return os << b.data;
}
};

A::operator B() const { return data + 1; }

int main()
{
A a1(5);
A a2;
B b;

b = a1;
a2 = b;

std::cout << "a1 == " << a1 << ''\n''
<< "a2 == " << a2 << ''\n''
<< "b == " << b << ''\n'';

return 0;
}

Output:

a1 == 5
a2 == 5
b == 6
-Mike


这篇关于需要帮助铸造操作员......的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆