这个到底哪里有问题啊,我看不出来
运行的时候系统总是说那个int Fun的函数有问题,我没学好,希望有人能帮助我😭
Fun是构造函数,是不能有返回类型的,把int 去掉,return 0去掉。
你这个类也太牵强了,没有任何属性和方法,只有一个构造函数,而且构造函数里干的这些事,也和类没啥关系,一般也不会放到构造函数里。构造的含义,更多是初始化一些类属性而已
函数名不能和类名重名,因为这会被当做构造函数
将类名改一下
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
class Fun
{
public:
Fun(int x)
{
for(i=0;i<3;i++)
{
char password[10+1]={0};
printf("请输入一串密码且区分大小写\n");
int pos=0;
char ch;
while(pos<10)
{
ch=_getch();
printf("*");
password[pos++]=ch;
}
if(strcmp(password,"WXyyds0921")==0)
{
printf("密码输入成功,已登陆\n");
break;
}
else
{
printf("密码错误,请重试\n");
}
}
if(3<=i)
{
printf("密码输入错误三次,将退出程序\n");
}
}
private:
int i;
};
int main()
{
Fun r(0);
return 0;
}
虽然我们知道vptr指向虚函数表,那么虚函数表具体存放在内存哪个位置呢,虽然这里我们已经可以得到虚函数表的地址。实际上虚函数指针是在构造函数执行时初始化的,而虚函数表是存放在可执行文件中的。
下面的一篇博客测试了微软的编译器将虚函数表存放在了目标文件或者可执行文件的常量段中,http://blog.csdn.net/vicness/article/details/3962767
在gcc编译器的实现中虚函数表vtable存放在可执行文件的只读数据段.rodata中。
虚函数表vtable在Linux/Unix中存放在可执行文件的只读数据段中(rodata),这与微软的编译器将虚函数表存放在常量段存在一些差别。
参考自https://blog.csdn.net/w616589292/article/details/51250285