#include<iostream> using namespace std; class Base { public: int m,n; }; class Derived1 : Base{}; class Derived2 : public Derived1 { public: void SetMN( int M, int N) {m=M; n=N} void GetSumMN() {return (m+n);} }; int main() { Derived2 objD; objD.SetMN(3,4); cout<<”M+N=”<<objD.m+objD.n<<endl; return 0; } 编译时,只有“cout<<”M+N=”<<objD.m+objD.n<<endl;”为什么错误,怎么改
时间: 2024-01-17 17:03:00 浏览: 370
在Derived2类中,GetSumMN函数的返回值类型应该为int而不是void,并且函数体中应该使用return语句返回m+n的值。另外,在SetMN函数中,应该在函数体中的第二行加上分号。修改后的代码如下:
```
#include<iostream>
using namespace std;
class Base {
public:
int m,n;
};
class Derived1 : Base{};
class Derived2 : public Derived1 {
public:
void SetMN(int M, int N) {m=M; n=N;}
int GetSumMN() {return (m+n);}
};
int main() {
Derived2 objD;
objD.SetMN(3,4);
cout<<"M+N="<<objD.GetSumMN()<<endl;
return 0;
}
```
修改后,输出结果为:
```
M+N=7
```
相关问题
下面程序的运行结果是: #include <iostream> using namespace std; class BaseClass { public: ~BaseClass(){cout<<"~BaseClass() is called!"<<endl;} }; class DerivedClass:public BaseClass { public: ~DerivedClass(){cout<<"~DerivedClass() is called!"<<endl;} }; int main() { DerivedClass d; return 0; }
下面是程序的输出结果:
```
~DerivedClass() is called!
~BaseClass() is called!
```
程序中,类DerivedClass是公共继承自BaseClass的派生类。在main函数中,声明了一个DerivedClass对象d。当程序运行结束时,程序会自动调用d的析构函数,并按照继承顺序先调用DerivedClass的析构函数,再调用BaseClass的析构函数。因此,输出结果为~DerivedClass() is called!和~BaseClass() is called!。
#include<iostream> using namespace std class Base{ protected: Base(){cout<<'A';} Base(charc){cout<<c;}}; class Derived:public Base{ public: Derived(char c){cout<<c;}}; int main() {Derived dl('B'); return 0;} 执行这个程序屏幕上将显示输出
程序中存在语法错误,正确的代码应该是这样的:
```
#include<iostream>
using namespace std;
class Base {
protected:
Base() {
cout << 'A';
}
Base(char c) {
cout << c;
}
};
class Derived : public Base {
public:
Derived(char c) : Base(c) {
cout << c;
}
};
int main() {
Derived dl('B');
return 0;
}
```
运行结果是:`AB`。因为在创建 Derived 对象时会先调用 Base 的构造函数,然后再调用 Derived 的构造函数。在 Base 的默认构造函数中输出了字符 A,在 Base 的带参构造函数和 Derived 的构造函数中输出了字符 B。所以最终输出的结果是 AB。
阅读全文