#include <iostream> using namespace std; class Bclass{ public: Bclass(int i, int j) { x = i; y = j; } virtual int fun() { return 0; } protected: int x, y; }; class Iclass :public Bclass{ public: Iclass(int i, int j, int k) :Bclass(i, j) { z = k; } int fun() { return (x + y + z) / 3; } private: int z; }; int main(){ Iclass obj(2, 4, 10); Bclass p1 = obj; cout << p1.fun() << endl; Bclass& p2 = obj; cout << p2.fun() << endl; cout << p2.Bclass::fun() << endl; Bclass* p3 = &obj; cout << p3->fun() << endl; return 0; }
时间: 2024-04-02 20:31:45 浏览: 144
这段代码定义了两个类Bclass和Iclass,并在main函数中创建了一个Iclass对象obj。代码中涉及到了类的继承、虚函数、对象切割等概念。
在Bclass中定义了一个构造函数和一个虚函数fun(),并声明了两个成员变量x和y。
在Iclass中,通过public继承Bclass,并在构造函数中调用Bclass的构造函数初始化基类成员,同时定义了一个新的成员变量z和一个重写的fun()函数。
在main函数中,首先创建了一个Iclass对象obj,并通过对象切割创建了一个Bclass对象p1。由于对象切割的特性,p1只能访问到Bclass中的成员变量和函数,而不能访问Iclass中新增的成员变量和重写的函数。因此,p1.fun()只能调用Bclass中的fun()函数,输出结果为0。
接着,通过对象引用的方式创建了一个Bclass对象p2,并调用其fun()函数。由于p2指向的是Iclass对象obj的基类部分,因此调用的是Iclass中重写的fun()函数,输出结果为5。
在调用基类中的fun()函数时,使用了作用域解析运算符::来指定调用的是基类Bclass中的fun()函数,输出结果为0。
最后,通过指针的方式创建了一个Bclass指针p3,并调用其fun()函数。由于p3指向的是Iclass对象obj的基类部分,因此调用的是Iclass中重写的fun()函数,输出结果为5。
相关问题
#include<iostream> using namespace std; class C { public: C(int a) { x = a; } private: int x; }; class D :public C { public: D(int a):y(a){} private: int y; }; 指出错误,并说明原因
在类D的构造函数中,没有显式调用基类C的构造函数,因为类D是从类C派生而来的。因为类C没有默认构造函数,所以必须显式调用基类C的构造函数并传递参数。所以错误的行为是在类D的构造函数中未显式调用基类C的构造函数。
正确的代码应该是这样的:
```cpp
#include <iostream>
using namespace std;
class C {
public:
C(int a) { x = a; }
private:
int x;
};
class D : public C {
public:
D(int a, int b) : C(a) { y = b; }
private:
int y;
};
int main() {
D d(1, 2);
return 0;
}
```
在类D的构造函数中,我们显式调用了基类C的构造函数并传递了参数a,这样,类D就可以正确地初始化基类C的成员变量x。
补全程序,并写出程序运行结果。 #include <iostream> using namespace std; class Class { public : Class ( int...
补全程序如下:
```
#include <iostream>
using namespace std;
class Class {
public:
Class(int a, int b, int c) {
x = a;
y = b;
z = c;
}
void print() {
cout << "x: " << x << endl;
cout << "y: " << y << endl;
cout << "z: " << z << endl;
}
private:
int x;
int y;
int z;
};
int main() {
Class obj(1, 2, 3);
obj.print();
return 0;
}
```
程序运行结果为:
```
x: 1
y: 2
z: 3
```
程序定义了一个名为 Class 的类,该类包括有参构造函数和一个 print() 函数,构造函数用于对类的私有成员变量进行初始化,print() 函数用于输出类的私有成员变量。在主函数 main() 中,创建了一个名为 obj 的 Class 类对象,构造函数传入三个整数参数 1、2 和 3。最后调用 obj 对象的 print() 函数,输出 obj 对象的私有成员变量 x、y 和 z 的值。
阅读全文