一个简单C++程序的2个小疑点

一个简单C++程序的2个小问题?
#include <iostream>
#include <string>
using namespace std;

class Excep
{
public:
Excep():report("除数为零!"){}
const string prdouble() const {return report;}
private:
const string report;
};

double quotient(double numerator,double denominator);  // 两个数相除

int main()
{
double num1,num2,result;
cout<<"请输入两个数,被除数在前,除数在后:";
while(cin>>num1>>num2) // 为什么可以这么用?>>的返回值是什么?
{
try
{
result=quotient(num1,num2);
cout<<"商为"<<result<<endl;
}
catch(Excep &ex)
{
cout<<"发生了异常:"<<ex.prdouble()<<endl;
system("pause");
return 0;
}
cout<<"请输入两个数,被除数在前,除数在后:";
}
return 0;
}

double quotient(double numerator,double denominator)
{
if(denominator==0)
throw Excep(); // 为什么不需要 throw new Excep();?
return numerator/denominator;
}

while(cin>>num1>>num2) // 为什么可以这么用?>>的返回值是什么?
throw Excep(); // 为什么不需要 throw new Excep();?
------解决方案--------------------
cin在输出成功会有返回,返回的是istream对象*this;
创建一个对象并使用有两种方式,如栈上的:直接 A a;
另一种堆上的A *p=new A()
而此处传递的是引用,采用A a的方式,而Excep()的方式是匿名的形式
------解决方案--------------------
可以连用>>,是因为运算符重载时返回的是引用类型。
------解决方案--------------------
引用:
cin在输出成功会有返回,返回的是istream对象*this;
创建一个对象并使用有两种方式,如栈上的:直接 A a;
另一种堆上的A *p=new A()
而此处传递的是引用,采用A a的方式,而Excep()的方式是匿名的形式


Excep()的方式是匿名的形式, very correct.
------解决方案--------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

------解决方案--------------------
cin>>num1>>num2
这个吧,是由输入操作符决定的,具体地说
cin>>num1 会返回cin对象,然后进行cin>>num2再返回cin
这下明白了吧。
------解决方案--------------------
引用:
Quote: 引用:

cin在输出成功会有返回,返回的是istream对象*this;
创建一个对象并使用有两种方式,如栈上的:直接 A a;
另一种堆上的A *p=new A()
而此处传递的是引用,采用A a的方式,而Excep()的方式是匿名的形式

这个cin对象放在while里面什么时候为true,什么时候为false呢?

ctrl+z时候,为NULL
------解决方案--------------------
ctrl+z表示结束
------解决方案--------------------
>>返回它的左操作数,这里就是cin
cin在逻辑判断的上下文,即if()这样的环境下,会调用它的operator bool()

throw Except();没有new一是因为这是C++而不是Java;
二是因为期望抛出的是对象而非对象的指针,Except()返回的是一匿名对象,new Except()返回的是一对象的指针。
------解决方案--------------------
另外提及一点:好好看书。
------解决方案--------------------
输入一个数的时候,从cin中提取第一个数到num1,返回cin,然后再从cin中提取一个数到num2,由于只输入了一个数,流中没有东西可以提取了,这时的提取是失败的,cin是fail状态,如果调用bool操作符,得到的就是false。