64,282
社区成员
发帖
与我相关
我的任务
分享
class Base
{
public:
Base(int j) : i(j) { }
virtual ~Base() { }
void func1()
{
i *= 10;
func2();
}
int getValue()
{
return i;
}
protected:
virtual void func2()
{
i++;
}
protected:
int i;
};
class Child : public Base
{
public:
Child(int j) : Base(j) { }
void func1()
{
i *= 100;
func2();
}
protected:
void func2()
{
i += 2;
}
};
int main(void)
{
Base *pb = new Child(1);
pb->func1();
cout<<pb->getValue()<<endl;
delete pb;
return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base
{
public:
Base(int j) : i(j) { }
virtual ~Base() { }
virtual void func1()
{
i *= 10;
func2();
}
int getValue()
{
return i;
}
protected:
virtual void func2()
{
i++;
}
protected:
int i;
};
class Child : public Base
{
public:
Child(int j) : Base(j) { }
void func1()
{
i *= 100;
func2();
}
protected:
void func2()
{
i += 2;
}
};
int main(void)
{
Base *pb = new Child(1);
pb->func1();
cout<<pb->getValue()<<endl;
delete pb;
return 0;
}
这样就等于102.
原题中基类的func1()没有定义为虚函数,所以pb->func1()调用的是base版本的,所以此时i=10,然后在func1()中调用的func2()基类中已声明为虚函数,调用时发生动态绑定,使其调用的是派生类版本,所以i=12.