注册 登录
编程论坛 C++教室

小白求助 关于继承的问题

d7se123 发布于 2020-03-30 19:03, 3233 次点击
只有本站会员才能查看附件,请 登录



Parent父类中有一个showParent方法  那么Child继承父类,也继承了一个一个showParent方法
c1.showParent()是调用的父类的 showParent  还是子类的
11 回复
#2
rjsp2020-03-30 22:12
上面调用的是 ,你这是图像吧,我想拷贝一段文字都没办法
上面调用的是子类的那个函数,下面特意指明了调用父类的那个函数。
#3
d7se1232020-03-31 13:41
程序代码:
#include "iostream"
using std::endl;
using std::cin;
using std::cout;

class Parent
{
public:
    int a;
    int b;
public:
    void getParent()
    {
        cout << a << " " << b << endl;
    }
};

class Child :public Parent
{
public:
    int a;
    int b;
public:
    void getChild()
    {
        cout << a << " " << b << endl;
    }
};

int main()
{
    Child c1;
    c1.getParent();  //大哥问题在这,Child继承父类Parent,也继承了他的getParent()方法,那么用子类对象去调getParent方法,
                    调用的是父类的还是子类继承过来的方法呀?就是说调用的这个getParent方法属于父类还是子类?
    system("pause");
    return 0;
}
#4
d7se1232020-03-31 13:41
回复 2楼 rjsp
这个问题一直困扰着我
#5
rjsp2020-03-31 16:33
Child继承父类Parent,也继承了他的getParent()方法,那么用子类对象去调getParent方法,调用的是父类的还是子类继承过来的方法呀?就是说调用的这个getParent方法属于父类还是子类?

你是不是误以为 派生类 继承了 基类,就意味着 基类的成员函数 被复制了一份给 派生类?

在你3楼代码的main函数中增加一句
cout << boolalpha << (&Child::getParent == &Parent::getParent) << endl;
它将输出 true。
也就是说,class Child 和 class Parent 的成员函数 getParent 是同一个。
#6
d7se1232020-03-31 19:14
回复 5楼 rjsp
大佬 解答的好啊 心理有点明白了 这个知识点超出我目前知识范围了 不过根据你的回答父类的这个方法和子类的实际上是同一个
#7
d7se1232020-03-31 19:15
回复 5楼 rjsp
水平蛮高的大佬
#8
d7se1232020-03-31 19:21
回复 5楼 rjsp
对了 继承不是说派生类继承基类所有成员方法和成员变量吗?
怎么基类的方法不复制一遍给派生类呢?
太过底层的东西我估计理解不了 以后学汇编就应该能懂了
#9
rjsp2020-04-01 08:43
回复 8楼 d7se123

假如定义了两个 Parent 对象,
Parent x, y;
那你是不是认为 x.getParent() 和 y.getParent() 是两个不同的函数?

当你定义了 void Parent::getParent(void) 之后,一切 Parent 类型的对象都可以调用它,
Parent x, y; 中 x, y 是 Parent 类型的对象;
Child u, v; 中 u, v 是 Child 类型的对象,也是 Parent 类型的对象。因为 Child 是public继承自 Parent,那么 Child 就是一个 Parent。
举个例子:
class 人类;
class 教师 : public 人类;
那么 教师 就是 人类,一切适用于 人类 的函数,自然适用于 教师 。
#10
d7se1232020-04-01 13:30
明白了 我看视频上说 子类是特殊的父类 大致是这个意思吧
#11
叶纤2020-04-01 15:41
这和结构体好像啊,你就把他当结构体就行了
就是儿子里包含父亲的所以
用结构体就是
struct a
{}
struct b
{struct a}
ps::我是新手,可以当笑话听听
#12
d7se1232020-04-14 20:28
回复 5楼 rjsp
cout << &Child::getParent<<" "<< &Parent::getParent) << endl;//class Child 和 class Parent 的成员函数 getParent 是同一个。
为啥打印两个地址是 1 1  ?
1