问两个C++ 问题!

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:40:43
//程序①:
#include<iostream.h>
class Rational
{
public:
Rational(int d,int n)
{
den=d;
num=n;
}
operator double();
private:
int den,num;
};
Rational::operator double()
{
return double(den)/double(num);
}
void main()
{
Rational r(5,8);
double d=4.7;
d+=r;
cout<<d<<endl;
}

程序①问题:
程序中operator double()这个类型转换函数是在类体外定义的;但它却出现了返回值,虽然它不是void类型,但是类型转换函数的规则不是说类型转换函数不可以有返回值吗?为什么在这道程序里有返回值,而且没错误??

//程序②:
#include<iostream.h>
class A
{
public:
A();
A(int i){a=i;}
void print(){cout<<a<<endl;}
int geta(){return a;}
private:
int a;
};
class B:public A
{
public:
B(){b=0;}

第一个问题你可以通过下面例子理解如:
double a = double(2);
operator double()是一个类型转换函数,如果他有返回值则应该写为:
return_type operator double()
显然上面的定义确实没有返回值类型,但是类型转换必须是将某类型转换为另一个类型,并可以赋值,因此函数定义内使用了 return语句。
2. aa=bb是将bb类中的基类中的数据剪裁并赋值给基类。bb中的数据9是基类数据,因此aa中的a数据为9。尽管是指针类型但没有虚函数同样也要剪裁,pa->print()由于pa是基类指针依然调用基类函数。