public class MyClass { private int val1,val2 ; public void myFun(int x,int y) { val1=x ; val2=y ; System.out.println("The sum is: "+(val1+val2)) ; } public static void main(String arg[]) { MyClass MyObj=new MyClass(); MyObj.myFun(1,2); } }
时间: 2023-07-15 17:12:11 浏览: 125
这是一个简单的 Java 程序,包含一个名为 MyClass 的类,其中有一个名为 myFun 的方法。该方法接受两个整数参数 x 和 y,将它们分别赋值给类的成员变量 val1 和 val2,并计算它们的和,最后输出结果。在 main 函数中,我们创建了 MyClass 的一个对象 MyObj,并调用了它的 myFun 方法,传入参数 1 和 2。程序运行后会输出 "The sum is: 3"。
相关问题
class MyClass { private: int x; public: MyClass(int val) : x(val) { } void set(int i) { x = i;} int get() {return x;} }; int main() { const MyClass foo(10); foo.set(20); return 0; } 错误
这段代码存在一个逻辑错误,具体来说是在使用const关键字声明常量对象foo后,尝试在常量对象上调用非常量成员函数set,这将导致编译错误。
在C++中,当使用const关键字声明一个对象时,该对象被视为只读对象,不能在其上执行修改操作。因此,如果在常量对象上调用非常量成员函数,编译器将会报错,因为这个操作会试图对常量对象进行修改。
修复这个错误的方法是,将成员函数set声明为常量成员函数,以确保它不会修改对象的状态,或者不在常量对象上调用set函数,例如:
```
class MyClass {
private:
int x;
public:
MyClass(int val) : x(val) { }
void set(int i) const { x = i;} // 声明为常量成员函数
int get() const {return x;} // 声明为常量成员函数
};
int main() {
const MyClass foo(10);
// foo.set(20); // 试图在常量对象上调用非常量成员函数,将导致编译错误
return 0;
}
```
在这个修改后的代码中,成员函数set被声明为常量成员函数,以确保它不会修改对象的状态。如果需要修改对象的状态,可以在非常量对象上调用set函数。
#include <iostream> using namespace std; class MyClass{ int val; public: MyClass(int i){ val=i; cout<<"构造函数!\n"; } MyClass(const MyClass &p){ val=p.val; cout<<"拷贝构造函数!\n"; } ~MyClass(){ cout<<"**析构函数\n";} int getval(){ return val;} MyClass MkBigger(){ MyClass o(val*2); //正常构造 return o; //局部变量返回时,复制构造 } }; void display(MyClass ob){ //值传递:发生1次复制构造 cout<<"val="<<ob.getval()<<endl; } int main(){ MyClass a(10); //正常构造 cout<<"调用display()之前.\n"; display(a); cout<<endl; a=a.MkBigger(); cout<<"调用MkBigger()之后.\n"; display(a); cout<<"第2次调用display()之后.\n"; cout<<endl; }怎么输出的,为什么怎么输出
这段代码的输出结果和上一段代码的输出结果是一样的。输出结果为:
构造函数!
调用display()之前.
拷贝构造函数!
val=10
**析构函数
构造函数!
拷贝构造函数!
**析构函数
调用MkBigger()之后.
拷贝构造函数!
val=20
**析构函数
第2次调用display()之后.
**析构函数
**析构函数
这是因为程序中使用了值传递的方式来传递 MyClass 对象,这会导致复制构造函数被调用。在调用 display() 函数时,会发生一次复制构造,因此会输出一次拷贝构造函数的信息。在调用 MkBigger() 函数时,由于局部变量 o 是在函数内部创建的,因此在返回时会发生一次复制构造,也会输出一次拷贝构造函数的信息。
阅读全文