C++: 静态调用
2006-05-22 09:57
183 查看
#include <iostream>
#include <string>
using namespace std;
class Shape
{
public:
Shape(void) {}
~Shape(void) {}
virtual void draw(void) const { cout<<"Shape draw"<<endl; }
};
class Rectangle : public Shape
{
public:
Rectangle(void) {}
~Rectangle(void) {}
void draw(void) const { cout<<"Rectangle draw"<<endl; }
};
class Ellipse : public Shape
{
public:
Ellipse(void) {}
~Ellipse(void) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
Shape *pr = new Rectangle;
pr->draw();
pr->Shape::draw();
delete pr;
pr = NULL;
Shape *pe = new Ellipse;
pe->draw();
delete pe;
pe = NULL;
}
OUT:
Rectangle draw
Shape draw
Shape draw
在上面的例子中,通过指定一个完整的class名称来调用基类的虚方法(pr->Shape::draw();),
这里就是静态调用。通过该方法我们可以通过一个指向子类的指针调用基类的方法。我们也可以
不用改写(override)该虚方法(draw),在子类(Ellipse)中没有对虚方法(draw)进行重写,
它可以调用基类的默认方法,这是虚函数的默认行为。
#include <string>
using namespace std;
class Shape
{
public:
Shape(void) {}
~Shape(void) {}
virtual void draw(void) const { cout<<"Shape draw"<<endl; }
};
class Rectangle : public Shape
{
public:
Rectangle(void) {}
~Rectangle(void) {}
void draw(void) const { cout<<"Rectangle draw"<<endl; }
};
class Ellipse : public Shape
{
public:
Ellipse(void) {}
~Ellipse(void) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
Shape *pr = new Rectangle;
pr->draw();
pr->Shape::draw();
delete pr;
pr = NULL;
Shape *pe = new Ellipse;
pe->draw();
delete pe;
pe = NULL;
}
OUT:
Rectangle draw
Shape draw
Shape draw
在上面的例子中,通过指定一个完整的class名称来调用基类的虚方法(pr->Shape::draw();),
这里就是静态调用。通过该方法我们可以通过一个指向子类的指针调用基类的方法。我们也可以
不用改写(override)该虚方法(draw),在子类(Ellipse)中没有对虚方法(draw)进行重写,
它可以调用基类的默认方法,这是虚函数的默认行为。
相关文章推荐
- C#如何静态调用C++中的方法(静态调用dll)
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)
- C++静态函数中调用非静态成员函数或变量
- C# 中静态调用C++dll 和C# 中动态调用C++dll
- C++ 类的静态方法作为回调函数传给另外一个类的方法,并调用之
- C# 中静态调用C++dll 和C# 中动态调用C++dll
- C++调用DLL有两种方法——静态调用和动态调用
- C++_静态局部变量的值在函数结束后不会释放,也不会被外部调用
- bcb平台的C++dll的静态调用法和动态调用法的方法
- [Linux-C++] Ubuntu上程序调用静态库文件
- Visual 2012 C++ 创建和静态调用dll
- C++ 静态成员函数调用非静态成员函数方法
- 关于函数指针调用C++非静态成员
- 在c++中,静态数据成员可以被非静态成员函数调用吗?如果可以调用的话那为什么还要定义静态成员函数呢
- Thinking in C++ ----第8,9,10章(const成员函数、内联函数、静态对象的析构函数调用时机)
- 在C++中调用DLL中的函数——静态调用和动态调用
- C++使用线程函数pthread_create时,调用的成员函数要定义为静态成员函数
- C++如何在r3静态调用NT函数
- C++基础 静态成员,析构函数显示调用 课本5.1
- C++静态函数中调用非静态成员函数或变量