C++父类子类中虚函数的使用
2011-03-29 14:01
239 查看
构造函数不能是虚函数,因为在调用构造函数创建对象时,构造函数必须是确定的,所以构造函数不能是虚函数。
析构函数可以是虚函数。
1.父类Father.h:
Father.cpp
2.子类Child.h:
Child.cpp
3.测试类Test.cpp
4.输出结果:
Father is called. count = 1
Father::getCount() count = 1
father1 count = 1
~Father is called.
************** father1 end *****************
Father is called. count = 1
Child is called. count = 2, age = 20
Child::getCount() count = 2
father2 count = 2
~Child is called.
~Father is called.
************** father2 end *****************
Father is called. count = 1
Child is called. count = 2, age = 20
Child::getCount() count = 2
child count = 2
Child::getAge() age = 20
child age = 20
~Child is called.
~Father is called.
************** child end *****************
析构函数可以是虚函数。
1.父类Father.h:
#pragma once class Father { public: Father(void); virtual ~Father(void); virtual int getCount(); public: int count; };
Father.cpp
#include "StdAfx.h" #include "Father.h" #include <iostream> using namespace std; Father::Father(void) { count = 1; cout<<"Father is called. count = "<<count<<endl; } Father::~Father(void) { cout<<"~Father is called."<<endl; } int Father::getCount() { cout<<"Father::getCount() count = "<<count<<endl; return count; }
2.子类Child.h:
#pragma once #include "father.h" class Child : public Father { public: Child(void); virtual ~Child(void); virtual int getCount(); int getAge(); public: int age; };
Child.cpp
#include "StdAfx.h" #include "Child.h" #include <iostream> using namespace std; Child::Child(void) { count = 2; age = 20; cout<<"Child is called. count = "<<count<<", age = "<<age<<endl; } Child::~Child(void) { cout<<"~Child is called."<<endl; } int Child::getCount() { cout<<"Child::getCount() count = "<<count<<endl; return count; } int Child::getAge() { cout<<"Child::getAge() age = "<<age<<endl; return age; }
3.测试类Test.cpp
#include "stdafx.h" #include <cstdlib> #include <iostream> #include "Child.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { Father *father1 = new Father(); cout<<"father1 count = "<<father1->getCount()<<endl; delete father1; cout<<"************** father1 end *****************"<<endl<<endl; Father *father2 = new Child(); cout<<"father2 count = "<<father2->getCount()<<endl; // father2 don't have getAge() method delete father2; cout<<"************** father2 end *****************"<<endl<<endl; Child *child = new Child(); cout<<"child count = "<<child->getCount()<<endl; cout<<"child age = "<<child->getAge()<<endl; delete child; cout<<"************** child end *****************"<<endl<<endl; getchar(); return 0; }
4.输出结果:
Father is called. count = 1
Father::getCount() count = 1
father1 count = 1
~Father is called.
************** father1 end *****************
Father is called. count = 1
Child is called. count = 2, age = 20
Child::getCount() count = 2
father2 count = 2
~Child is called.
~Father is called.
************** father2 end *****************
Father is called. count = 1
Child is called. count = 2, age = 20
Child::getCount() count = 2
child count = 2
Child::getAge() age = 20
child age = 20
~Child is called.
~Father is called.
************** child end *****************
相关文章推荐
- c++中父类的静态成员变量/函数在子类中的使用
- c++子类和父类成员函数重名
- c++子类和父类成员函数重名
- c++ 父类指针如何操作子类的新函数
- c++子类和父类成员函数重名
- C语言使用技巧3:C++中子类调用父类重载函数的方法
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- C++ 子类对象当父类对象使用
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- c++子类和父类成员函数重名
- C++虚函数表解析(图文并茂,非常清楚)( 任何妄图使用父类指针想调用子类中的未覆盖父类的成员函数的行为都会被编译器视为非法)good
- c++子类和父类成员函数重名
- c++子类和父类成员函数重名
- C++ 子类和父类同名成员变量或函数
- C++中指向子类的父类指针访问父、子类成员时的权限和函数隐藏规则
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- C++父类子类间函数重定义,虚函数重写(覆盖)以及重载
- C++父类定义虚函数其派生类的同名函数使用virtual关键字吗?
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题