c++关于派生类的指针调用

定义一个基类BaseClass,有公有成员函数fn1( ),fn2( ),函数内打印出类名及函数名,有私有数据成员int i,从它派生出类DerivedClass,有公有成员函数fn1( ),,函数内打印出类名及函数名,私有数据成员int j,在主函数中分别用BaseClass及DerivedClass类的指针去调用fn1( ),fn2,观察运行结果。要求:
(1)注意派生类的构造函数必须写正确
(2)分析通过指针调用成员函数的运行结果。

我写了大概的框架,在此基础上修改即可:

#include<iostream>
using namespace std;
class BaseClass{
	public:
		void fn1(){
			cout<<"BaseClass::fn1()调用"<<endl;
		}
		void fn2(){
			cout<<"BaseClass::fn2()调用"<<endl;
		}
	private:
		int i;
}; 
class DerivedClass:public BaseClass{
	public:
		void fn1(){
			cout<<"DerivedClass::fn1()调用"<<endl;
		}
	private:
		int j;
};
int main(){
	BaseClass *b=new DerivedClass;
	b->BaseClass::fn1();
	b->fn1();
	b->fn2();
}

可能写的不正确,求赐教

#include<stdio.h>
#pragma warning(disable:4996)
#include<iostream>
using namespace std;
class BaseClass{
public:
    virtual void fn1(){
        cout << "BaseClass::fn1()调用" << endl;
    }
    void fn2(){
        cout << "BaseClass::fn2()调用" << endl;
    }
private:
    int i;
};
class DerivedClass :public BaseClass{
public:
    void fn1(){
        cout << "DerivedClass::fn1()调用" << endl;
    }
private:
    int j;
};
int main(){
    BaseClass *b = new DerivedClass;
    b->fn1();
    b->fn2();
    cout << endl;
    BaseClass *a = new BaseClass;
    a->fn1();
    a->fn2();
}

 

显然基类的fn1应该定义成虚函数,体现多态的作用,否则只是简单的函数覆盖

另外主函数应该分别创建基类和子类的指针,然后各自调用fn1()和fn(2),观察输出信息来了解多态的机制

现在是什么问题

#include<stdio.h>

#pragma warning(disable:4996)
#include<iostream>
using namespace std;
class BaseClass{
public:
	void fn1(){
		cout << "BaseClass::fn1()调用" << endl;
	}
	void fn2(){
		cout << "BaseClass::fn2()调用" << endl;
	}
private:
	int i;
};
class DerivedClass :public BaseClass{
public:
	void fn1(){
		cout << "DerivedClass::fn1()调用" << endl;
	}
private:
	int j;
};
int main(){
	DerivedClass *b = new DerivedClass;
	b->BaseClass::fn1();
	b->fn1();
	b->fn2();
	cout << endl;
	BaseClass *a = new DerivedClass;
	a->BaseClass::fn1();
	a->fn1();
	a->fn2();
}

 

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html