我正在为虚拟rolodex做一个家庭作业项目,该项目已经调用了一个主类,一个rolodex类和一个卡类.要将所有"卡"的内容输出到控制台,赋值表示main()应该在rolodex类中调用show(...)函数,并将其传递给ostream并显示(...)然后迭代通过卡片,调用每个showCard()函数.实际显示由卡对象的showCard()函数完成,显示在提供的ostream上.
我不明白为什么ostream应该/应该通过任何地方.似乎作业要求这样的事情:
main() {
Rolodex myRolodex;
ostream myStream;
myRolodex.show(myStream);
}
void Rolodex::show(ostream& theStream) {
//for each card 'i' in the Rolodex...
myCard[i].show(theStream);
}
void Card::show(ostream& theStream) {
theStream << "output some stuff" << endl;
}
Run Code Online (Sandbox Code Playgroud)
而不是像这样的东西:
main() {
Rolodex myRolodex;
myRolodex.show(); //no ostream passed
}
void Rolodex::show() {
//for each card 'i' in the Rolodex...
myCard[i].show();//no ostream passed
}
void Card::show() {
cout << "output some stuff" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我是误解了使用ostream作为参数还是错过了一些其他明显的理由将流pass传递到流中?
今天我正在按照一个教程让我挠头一小时.考虑:
public class MyClass {
public int getTotal() {
amount = 100;
return amount;
}
}
Run Code Online (Sandbox Code Playgroud)
以及JSP的摘录:
<p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere
Run Code Online (Sandbox Code Playgroud)
代码中没有任何地方声明或使用过名为" total " 的实例变量.在整个项目中(除了JSP之外)对"total"一词的唯一引用是方法getTotal().
因此,在经历了一些绝望的最后一次尝试之后,表达式语言似乎将$ {someObject.var}计算为"调用someObject对象的getVar()方法" .
我使用这个长篇教程超过一个星期,认为$ {someObject.var}说"从someObject直接获取保存的实例变量" var " .
我是否一直都错了,我的观察是正确的,为了使用EL引用任何实例变量,你必须提供一个名为getVarname()的相应getter方法,其中" Varname "是实例变量的名称?
此外,EL在这方面似乎不区分大小写.在上面的示例中,$ {objectOfTypeMyClass.total}中的 "total" 全部为小写,其中方法getTotal()具有大写"T".
虽然我们在这里,为什么我们不需要实例化变量"total"?我猜EL实际上并没有引用实例变量......只是一个getter方法?
是什么赋予了?
对于家庭作业,当主类在同一行上实例化同一类的两个对象时,我很难理解行为,如下所示.请注意,赋值的对象是类的行为类似于int:
main () {
MyClass x,y = 5;
cout << "x = " << x << endl; // outputs x = 0...why not 5???
cout << "y = " << y << endl; // outputs y = 5
}
Run Code Online (Sandbox Code Playgroud)
这里是头文件类定义:
class MyClass {
public:
MyClass(int initValue = 0); //constructor
operator int() {return myValue}; //conversion operator to int
private:
int myValue;
}
Run Code Online (Sandbox Code Playgroud)
最后,我的源文件:
#include "MyClass.h"
MyClass::MyClass(int initValue) {
myValue = initValue;
}
Run Code Online (Sandbox Code Playgroud)
为什么不像y那样用x值初始化x?