关于类的继承的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 15:39:09
#include <iostream>
using namespace std;
class a
{
public:

void b(int k);
protected:
int i;

};
void a::b(int k)
{i=k;}

class b:public a
{};
class c:public b
{
public:
void kk();
};

void c::kk()
{cout << i;}

int main()
{int jj;
a kk;
c ll;
cin>>jj;
kk.b(jj);
cout<<endl;
ll.kk();
return 0;
}

上面程序有什么错误? ll.kk();输出错误

谢谢
不好意思
不是很懂/。。

C继承B B继承A C不能直接调用A里的成员吗?

ll.a::b(jj); 具体是什么意思?

如果直接把{cout << i;}写成A的成员函数 就可以直接
a kk
kk.pp();
输出正确

但是在C中调用输出i就出错呢? 先谢谢高人解答..

你声明一c类对象ll,但是没有给i赋值啊
对象ll和对象kk是两个对象,没有什么关系的啊,ll.kk肯定只会输出默认值的
::是与控制符,派生类c的对象ll可以调用其基类的protected和public方法,所以ll.a::b(jj); 是对象ll通过调用基类的方法b来初始化成员i

请明白你在主程序中声明了两个不相干的对象,

a kk;
c ll;
cin>>jj;
kk.b(jj);
这几句你声明了对象kk,ll,并且通过调用kk.b(jj)给对象kk的i赋值,但是对象ll并没有调用b方法赋值

请记住类是一种抽象,对象是类的具体实例

就和我们都是人类,你和我是两个对象,我今儿吃糖饼烫后脑勺了和你没关系啊

对象ll和对象kk不是一回事,kk.b(jj)跟ll.kk()没有任何关系
要想输出请这样:
ll.a::b(jj);ll.kk();
我也想ll.b();但是编译出错了,然后好好端祥了一下才发现,原来是函数b和类b名字上发生了冲突,编译器不知道这个地方的b是类名还是函数名,被迫报错,你改成d试试,回答完毕。