#include <iostream> using namespace std; class MyClass { int* p; const int N; public: // ERROR **********found********** MyClass(int val) : N=1 { p = new int; *p = val; } // ERROR **********found********** ~MyClass() { delete *p; } friend void print(MyClass& obj); }; // ERROR **********found********** void MyClass::print(MyClass& obj) { cout << "value = " << *(obj.p) << endl; cout << "number = " << obj.N << endl; } int main() { MyClass obj(63); print(obj); return 0; }
时间: 2023-06-29 10:16:18 浏览: 87
在这段代码中,有三个错误:
1. 在 MyClass 类的构造函数中,使用了 const 成员初始化列表,但是 N 是一个非静态成员变量,不能在初始化列表中初始化。正确的做法是在构造函数的函数体中给 N 赋值。
2. 在 MyClass 类的析构函数中,使用了 delete *p,但是 p 是一个指向 int 的指针,应该使用 delete p。
3. 在 MyClass 类的友元函数 print() 中,应该将其定义为 MyClass 类的成员函数,而不是独立的函数。
下面是修改后的代码:
```cpp
#include <iostream>
using namespace std;
class MyClass {
int* p;
const int N;
public:
MyClass(int val) : N(1) {
p = new int;
*p = val;
}
~MyClass() { delete p; }
void print() {
cout << "value = " << *p << endl;
cout << "number = " << N << endl;
}
};
int main() {
MyClass obj(63);
obj.print();
return 0;
}
```
相关问题
#include <iostream> using namespace std; class MyClass { public: MyClass(int x):value(x) { cout<<"Constructor"<<endl; } // ERROR **********found********** void ~MyClass() { cout<<"Destructor"<<endl; } void Print() const; private: // ERROR **********found********** int value=0; }; // ERROR **********found********** void MyClass::Print() { cout<<"The value is "<<value<<endl; } int main() { MyClass object(10); object.Print(); return 0; }
这是一个 C++ 程序,其中包含了一些错误(错误已被标注为 `ERROR ********found********`)。程序定义了一个类 `MyClass`,其中包含一个有参数的构造函数、一个析构函数和一个成员函数 `Print()`。程序创建了一个 `MyClass` 对象 `object`,然后调用了 `object` 的 `Print()` 成员函数。但是程序中存在以下错误:
1. 在析构函数的定义中,需要在函数名前加上 `~`,表示这是一个析构函数。需要将 `void ~MyClass()` 修改为 `~MyClass()`。
2. 在 `Print()` 成员函数中,需要在函数声明和定义中加上 `const` 修饰符,表示该函数不会修改对象的状态。需要将函数声明和定义修改为 `void Print() const;` 和 `void MyClass::Print() const { ... }`。
3. 在 `Print()` 成员函数的定义中,由于使用了 `const` 修饰符,因此无法修改成员变量的值。在输出成员变量时,需要使用 `this->value` 访问成员变量。
4. 在 `MyClass` 类的定义中,成员变量 `value` 的初始化应该在构造函数的初始化列表中完成,而不是在成员变量的声明中完成。需要将成员变量的声明修改为 `int value;`,并在构造函数的初始化列表中添加 `value(x)`。
以下是修改后的程序:
```cpp
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int x):value(x) { cout << "Constructor" << endl; }
~MyClass() { cout << "Destructor" << endl; }
void Print() const;
private:
int value;
};
void MyClass::Print() const {
cout << "The value is " << this->value << endl;
}
int main() {
MyClass object(10);
object.Print();
return 0;
}
```
// proj31.cpp #include <iostream> using namespace std; class Member { // ERROR ********found******** private: Member(int val) : value(val) {} int value; }; class MyClass { Member _m; public: // ERROR ********found******** MyClass(int val) {} int GetValue() const { return _m.value; } }; int main() { MyClass *obj = new MyClass(10); // ERROR ********found******** 下列语句输出obj指向类中的value值 cout << "The value is: " << obj.GetValue() << endl; delete obj; return 0; }
这是一个 C++ 的程序,其中包含了一些错误(错误已被标注为 `ERROR ********found********`)。程序实现了两个类 `Member` 和 `MyClass`,并在 `main` 函数中创建了一个指向 `MyClass` 对象的指针 `obj`,然后输出了 `obj` 指向的对象的 `value` 值。但是程序中存在以下错误:
1. 在 `Member` 类的定义中,构造函数被声明为 `private`,这意味着无法从类外部创建 `Member` 类对象。如果需要在类外部创建 `Member` 类对象,需要将构造函数声明为 `public` 或者 `protected`。
2. 在 `MyClass` 类的定义中,构造函数没有初始化 `Member` 类的对象 `_m`,因此 `_m` 的值是未定义的。需要在 `MyClass` 的构造函数中初始化 `_m` 对象。
3. 在 `MyClass` 的构造函数中,没有将参数 `val` 传递给 `_m` 对象的构造函数,因此 `_m` 对象的值仍然是未定义的。需要在 `MyClass` 的构造函数中将参数 `val` 传递给 `_m` 对象的构造函数。
4. 在 `main` 函数中,创建 `MyClass` 对象的语法有误,应该使用 `new` 关键字创建动态对象,并将返回的指针赋值给 `obj`。
以下是修改后的程序:
```cpp
#include <iostream>
using namespace std;
class Member {
public:
Member(int val) : value(val) {}
int value;
};
class MyClass {
public:
MyClass(int val) : _m(val) {}
int GetValue() const { return _m.value; }
private:
Member _m;
};
int main() {
MyClass *obj = new MyClass(10);
cout << "The value is: " << obj->GetValue() << endl;
delete obj;
return 0;
}
```
阅读全文