#include "iostream.h"
class Base
{
public:
virtual Base* afn()
{
cout<<"This is Base class.\n";
return this;
}
};
class SubClass:public Base
{
public:
virtual SubClass* afn() //实为虚拟函数
{
cout<<"This is SubClass. \n";//问题overriding virtual function differs from 'Base::afn' only by return type or calling convention
return this;
}
};
void test (Base& x)
{
Base* b;
b=x.afn();
}
void main()
{
Base bc;
SubClass sc;
test(bc);
test(sc);
}
我是按照书上写的 不知道为什么会有错误 请高手指点!
这个不是函数重载的问题,而是虚函数的另一个种写法。
关于C++虚拟函数的问题
答案:4 悬赏:0 手机版
解决时间 2021-01-23 16:03
- 提问者网友:骨子里的高雅
- 2021-01-22 20:53
最佳答案
- 五星知识达人网友:拜訪者
- 2021-01-22 21:09
virtual SubClass* afn()
这个你要是把afn函数里面+个参数还可以实现一下函数的的重载
如果是你这样不能实现函数的重载,因为重载函数不以返回值来区分.
把virtual SubClass* afn() 改为:
virtual Base * afn()或者Base * afn()都可以
建议你去看一下虚函数的作用;
下面是我跟你改的个简单一点的虚函数的作用:
#include "iostream.h"
class Base
{
public:
virtual void afn()
{
cout<<"This is Base class.\n";
}
};
class SubClass:public Base
{
public:
virtual void afn()
{
cout<<"This is SubClass. \n";
}
};
void test (Base& x)
{
x.afn();
}
void main()
{
Base bc;
SubClass sc;
test(bc);
test(sc);
}
这个你要是把afn函数里面+个参数还可以实现一下函数的的重载
如果是你这样不能实现函数的重载,因为重载函数不以返回值来区分.
把virtual SubClass* afn() 改为:
virtual Base * afn()或者Base * afn()都可以
建议你去看一下虚函数的作用;
下面是我跟你改的个简单一点的虚函数的作用:
#include "iostream.h"
class Base
{
public:
virtual void afn()
{
cout<<"This is Base class.\n";
}
};
class SubClass:public Base
{
public:
virtual void afn()
{
cout<<"This is SubClass. \n";
}
};
void test (Base& x)
{
x.afn();
}
void main()
{
Base bc;
SubClass sc;
test(bc);
test(sc);
}
全部回答
- 1楼网友:纵马山川剑自提
- 2021-01-22 23:40
#include "iostream.h"
class Base
{
public:
Base* afn()
{
cout<<"This is Base class.\n";
return this;
}
};
class SubClass:public Base
{
public:
virtual SubClass* afn() //实为虚拟函数
{
cout<<"This is SubClass. \n";//问题overriding virtual function differs from 'Base::afn' only by return type or calling convention
return this;
}
};
void test (Base& x)
{
Base* b;
b=x.afn();
}
void main()
{
Base bc;
SubClass sc;
test(bc);
test(sc);
}
你
class Base
{
public:
virtual Base* afn()
{
cout<<"This is Base class.\n";
return this;
}
函数Base* afn()前的 virtual是没有意义的呀
它只对其父类起作用的
而此时Base本身就是基类了其上没有父类
不信你把他删掉试试
- 2楼网友:不如潦草
- 2021-01-22 23:24
1.overriding virtual function differs from 'Base::afn' only by return type or calling convention 。 这句话的意思是告诉你函数的重载不能仅仅只靠返回值来区别。很显然编译器把你的用法当作了函数重载。
如果你的目的是实现多态,那么请将SubClass里面的虚函数返回值类型改为Base*。
- 3楼网友:廢物販賣機
- 2021-01-22 22:20
int:整型,整型变量表示整数。 在ms dos上,每个整型变量分配 16 bit 存储空间。整型又分成两类,一类表示有符号整数,用 1 bit 表示符号,15 bit 表示数值,可表示数值范围为 -32768 至 32767。一类表示无符号整数,16 bit 都表示数值,可表示数值范围为 0 至 65535。数值都用二进制存储。例如:int a; unsigned int date; 等。 十进制整型常量直接写数字,如:5,100 等;八进制整型常量数字前加 0,如:05,0100 等;十六进制整型常量数字加 0x,如:0x5,0x100 等。 short:短整型,也可写成 short int,在ms dos上,与整型相同。 long:长整型,也可写成 long int,表示较大的整数,在ms dos上,每个长整型变量分配 32 bit 存储空间。长整型也分成两类,一类表示有符号整数,用 1 bit 表示符号,31 bit 表示数值,可表示数值范围为 -2^31 至 2^31-1。一类表示无符号整数,32 bit 都表示数值,可表示数值范围为 0 至 2^32-1。数值都用二进制存储。 例如:long int a; unsigned long date; 等。 整型常量的值若超过了整型数范围,会自动被认为是长整型常量;整型常量也可以后加'l',强制置为长整型,如:5l,100l 等。 float:浮点型,近似表示实数,在ms dos上,每个浮点型变量分配 32 bit 存储空间。浮点型都是有符号的,可表示数值范围分为三段:-10^38 至 -10^-38, 0, 10^-38 至 10^38。数值都先化成指数,再用二进制存储。7 位有效数字。 例如:float x, y; 等。 浮点型常量可以写成小数形式,如 3.14159,也可以写成指数形式:1.2e12 (表示 1.2*10^12)。 double:双精度型,近似表示更大实数,在ms dos上,每个浮点型变量分配 64 bit 存储空间。双精度型都是有符号的,可表示数值范围分为三段:-10^308 至 -10^-308, 0, 10^-308 至 10^308。数值都先化成指数,再用二进制存储。7 位有效数字。 例如:double x, y; 等。 双精度型常量可以写成小数形式,如 3.14159,也可以写成指数形式:1.2e12 (表示1.2*10^12)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯