描述:
这两天在看COM书时,突然看到如下的问题:
说是IUnknown是一个非虚拟继承,于是,就出现下面这样的代码:
class c : abc 等等,完整的请看“------”号之间的东西。
---------------------------------------
typedef struct abc
{
virtual int q()=0;
virtual int a()=0;
virtual int r()=0;
}i;
class c : abc
{
};
int main(int argc, char* argv[])
{
return 0;
}
-------------------------
我想请问,以上这代码与以下这段代码有什么区别?为什么一个是 class c : abc 而,另一个是 class c : public abc,在 VC 编译器里都可以过?我以前怎么都没看过 class c : abc 这样的代码。。。
-----------------------
typedef struct abc
{
virtual int q()=0;
virtual int a()=0;
virtual int r()=0;
}i;
class c : public abc
{
};
int main(int argc, char* argv[])
{
return 0;
}
解决方案1:
对于struct abc,class c : abc相当于class c : public abc;
对于class abc, class c : abc相当于class c : private abc;
你可以自己改一下,看下
class c : abc //前面改成private, public之后有什么区别
abc是一个结构,对于结构,与类有一些区别。结构的默认是从public集成,默认的成员也是public,而类默认的是private的。当然还有其他的区别,
但是对于这个问题,已经够了。
所以对于结构,上面两种形式是一样的。