有些成员函数必须要定义?

femalelover 2006-09-27 03:04:08
我常常按照某些名著上说的去做:
如果要禁止某个方法被调用,那么就声明该方法为privata类型,并且不定义它.

现在产生了一个问题,下面的代码:
class CParent1
{
virtual void ShowNumber1(void); //不定义
};

class CParent2
{
virtual void ShowNumber2(void); //不定义
};

class CChild: public CParent1,public CParent2
{
virtual void ShowNumber2(void); //不定义
};

void main(void)
{
CParent1 *Parent1;
CParent2 *Parent2;
CChild *Child;
Child=new CChild;
Parent1 = Child;
Parent2 = Child;
printf ("%d, %d, %d", Parent1, Parent2, Child);
}
上面会报链接错误,有声明无定义那种.
...全文
148 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2006-09-27
  • 打赏
  • 举报
回复
怎么把分都给俺了。-_-
femalelover 2006-09-27
  • 打赏
  • 举报
回复
哦,明白了,谢谢.
晨星 2006-09-27
  • 打赏
  • 举报
回复
这话说的。。。

大多数编译器都把继承列表中第一个(即冒号后的第一个)基类对应的子对象放在子类对象的最前边。
而所谓“基类子对象”当然也是子类对象的一部分,所有第一个基类子对象的首地址当然也就是整个子类对象的地址。
femalelover 2006-09-27
  • 打赏
  • 举报
回复
谢谢,连晨星都光顾小弟的破帖了.

接着问题一下,俺不太懂C++内存模型, 上面的代码中 :

printf ("%d, %d, %d", Parent1, Parent2, Child);

会得到Parent1与Child的指针的首地址相同, 为什么呢?
晨星 2006-09-27
  • 打赏
  • 举报
回复
多打了一个“不”。应该是:“你故意不定义它……”。
晨星 2006-09-27
  • 打赏
  • 举报
回复
你不故意不定义它,那显然说明你根本不想用他,也不想别人用它,那还“virtual”干嘛?
如果你不想定义它,但想让子类定义它,应该使用纯虚函数。
weijiangshanwww 2006-09-27
  • 打赏
  • 举报
回复
class CParent1
{
virtual void ShowNumber1(void); //不定义
};

class CParent2
{
virtual void ShowNumber2(void); //不定义
};

class CChild: public CParent1,public CParent2
{
virtual void ShowNumber2(void); //不定义
};
改成:
class CParent1
{
private:
virtual void ShowNumber1(void){}; //不定义
};

class CParent2
{
private:
virtual void ShowNumber2(void){}; //不定义
};

class CChild: public CParent1,public CParent2
{
private:
virtual void ShowNumber2(void){}; //不定义
};
weijiangshanwww 2006-09-27
  • 打赏
  • 举报
回复
首先虚函数的主要作用是形成多态性,如果你没有定义,肯定会有错误,C中没定义的东西是不能使用的。
还有就是在编译的时候如果没有定义,编译器就无法正确的分配内存。
jixingzhong 2006-09-27
  • 打赏
  • 举报
回复
如果要禁止某个方法被调用,那么就声明该方法为privata类型,并且不定义它.
=================================
这个确实常用的方法,
比如无参构造函数,
通过自定义空函数, 并使之私有化,
可以防止意外调用构造,比如非预期的类型转化等 ~
sinall 2006-09-27
  • 打赏
  • 举报
回复
同意楼上看法。
adintr 2006-09-27
  • 打赏
  • 举报
回复
只声明不定义的不能是虚函数,
虚函数在建立虚函数表的时候需要函数的指针,有对函数的引用,连接会出错。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧