即使类B是A的派生也是这样吗?请给我一个示例代码
时间: 2023-04-08 10:01:42 浏览: 57
我可以回答这个问题。对于类的继承关系,如果类B是类A的派生类,那么B会继承A的所有成员变量和成员函数。同时,B也可以定义自己的成员变量和成员函数,以扩展A的功能。以下是一个示例代码:
```
class A {
public:
int a;
void funcA() {
// do something
}
};
class B : public A {
public:
int b;
void funcB() {
// do something
}
};
int main() {
B obj;
obj.a = 1;
obj.b = 2;
obj.funcA();
obj.funcB();
return 0;
}
```
在这个示例代码中,类B继承了类A的成员变量a和成员函数funcA,并且定义了自己的成员变量b和成员函数funcB。在main函数中,我们可以创建一个B的对象obj,并且访问它继承自A的成员变量和成员函数,以及它自己定义的成员变量和成员函数。
相关问题
从point类中派生出一个line类
可以通过继承的方式从point类中派生出一个line类。line类可以包括两个point对象,表示起点和终点,以及一些方法,如计算线段长度、计算线段斜率等。下面是一个示例代码:
```
class point {
protected:
double x, y;
public:
point(double a = 0, double b = 0) : x(a), y(b) {}
};
class line : public point {
private:
point p1, p2;
public:
line(point a, point b) : p1(a), p2(b) {}
double length() {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return sqrt(dx*dx + dy*dy);
}
double slope() {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return dy / dx;
}
};
```
在这个示例中,line类从point类继承了x和y两个数据成员,同时还包含了两个point对象p1和p2。line类中的length()和slope()方法可以计算线段的长度和斜率。注意,在line类中使用了point类的构造函数来初始化x和y数据成员。
在派生类的友元函数中调用另一个类的变量
在派生类中定义的友元函数中,可以直接访问派生类和基类的公有成员和保护成员,但不能访问私有成员。如果你想访问另一个类的变量,需要在该类中定义一个公有成员函数,用来返回该变量的值,然后在友元函数中调用该函数。
例如,假设你有两个类 A 和 B,B 是 A 的派生类,并且你在 B 中定义了一个友元函数 f。如果你想在 f 中访问 A 的私有变量 x,你可以在 A 中定义一个公有成员函数 getX(),用来返回 x 的值。然后在 f 中,你可以通过调用 b.getX()(其中 b 是 B 类的对象)来获取 x 的值。
下面是一个示例代码:
```
class A {
private:
int x;
public:
A() : x(0) {}
int getX() { return x; }
friend void f(B b);
};
class B : public A {
friend void f(B b);
};
void f(B b) {
int x = b.getX(); // 访问 A 的私有变量 x
// ...
}
```