VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1032|回复: 8

这段代码怎么改

[复制链接]

3

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-7 15:40:01 | 显示全部楼层 |阅读模式
#include<iostream.h>
class Base{
public:virtual void fun()=0;
};
class Test:public Base{
public:virtual void fun(){cout<<"test.fun="<<endl;}
};
void main(){
        Base a;
        Test*p; p=&a;
}

这段代码有错误,但不知道怎么改,请各位兄弟帮忙改一下
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-7 20:09:01 | 显示全部楼层
class Base{
public:virtual void fun()=0;
};

Base a;  //虚基类不能实例化
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-7 20:45:01 | 显示全部楼层
Base是一个抽象类,是不能实例化的,所以Base a;肯定会出错,可以改成
Test p;
Base* a = &p;
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-7 23:45:01 | 显示全部楼层
Test test;
Base *p = &test;
p->fun();
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-13 15:27:01 | 显示全部楼层
我说的详细点:
含有纯虚函数的类是虚基类,是不能够实例化的,所以你的main函数里面的Base a;是错误的,还值得注意的一点是,纯虚函数在基类里面是不能够定点函数体的且必须在派生类中被覆盖(越位override).
你应该是用这个程序来验证c++运行时的多态性,先定义基类的指针,然后指向派生类来实现多态性.
Test a;
Base *p=&a;
p->fun();
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-14 19:45:01 | 显示全部楼层
唉,我不知道大家为什么喜欢用虚基类这个词,不过像
class Base{
public:virtual void fun()=0;
};
这样包含纯虚函数的类应该叫做抽象类而不是虚基类,所谓虚基类,比如下面
class A{....};
class B:virtual public A {....};
class C:virtual public A {....};
这里,A就叫做B,C的虚基类,因为B,C在继承A时用了“virtual继承”,这种继承方法用于多重继承时,防止“钻石型多重继承”。比如:
class D: public B,pubilc C {....};
此时“virtual继承”可以保证D只保存一份A的成员变量。
呵呵,认真应对所讨论的问题而已,大家勿怪
回复

使用道具 举报

1

主题

27

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-1-15 17:54:01 | 显示全部楼层
学习
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-18 09:36:01 | 显示全部楼层
学到不少东西 多谢各位大人~
回复

使用道具 举报

0

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-18 20:45:01 | 显示全部楼层
THANK YOU.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表