一个笔试题,虚函数继承问题
// Extends.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
class A
{
A()
{
doSth();
}
virtual void doSth()
{
cout<<"This is A"<<endl;
}
void doOther(public class A &a)
{
a.doSth();
}
};
class B:public A
{
B()
{
}
virtual void doSth()
{
cout<<"This is B"<<endl;
}
void doMySelf()
{
doOther(*this);
}
};
void main()
{
B b;
A *a=&b;
a->doSth();
b.doMySelf();
}
VC6.0下报错
E:\Project\VC6.0\Extends\Extends.cpp(18) : error C2059: syntax error : 'public'
E:\Project\VC6.0\Extends\Extends.cpp(40) : error C2248: 'B::B' : cannot access private member declared in class 'B'
E:\Project\VC6.0\Extends\Extends.cpp(25) : see declaration of 'B::B'
E:\Project\VC6.0\Extends\Extends.cpp(42) : error C2248: 'doSth' : cannot access private member declared in class 'A'
E:\Project\VC6.0\Extends\Extends.cpp(14) : see declaration of 'doSth'
E:\Project\VC6.0\Extends\Extends.cpp(43) : error C2248: 'doMySelf' : cannot access private member declared in class 'B'
E:\Project\VC6.0\Extends\Extends.cpp(32) : see declaration of 'doMySelf'
Error executing cl.exe.
Extends.exe - 4 error(s), 0 warning(s)
[解决办法]
你这里哪有虚继承啊?
[解决办法]
class A
{
public:
A()
{
doSth();
}
virtual void doSth()
{
cout<<"This is A"<<endl;
}
void doOther(public class A &a)
{
a.doSth();
}
};
class B:public A
{
public:
B()
{
}
virtual void doSth()
{
cout<<"This is B"<<endl;
}
void doMySelf()
{
doOther(*this);
}
};