#include <iostream>
#include <stdio.h>
using namespace std;
class A
{
private:
int m_value;
public:
A(int mem)
{
m_value=mem;
{ //所以当程序编译之后,这个函数就有一个地址了,任何类的对象都可以访问这个地址
printf("%s\n","hello world");
printf("%s\n","1");
}
virtual void fuction2() //虚函数实现是需要靠虚函数表来访问
{
printf("%s\n","hello world");
printf("%s\n","2");
}
};
void main()
{
A *tmp=NULL;
tmp->fuction1(); //hello world
//1
tmp->fuction2(); //内存出错,指针赋值为NULL后,没有指向具体对象,因此虚函数表不知道是哪个对象访问
}
#include <stdio.h>
using namespace std;
class A
{
private:
int m_value;
public:
A(int mem)
{
m_value=mem;
}
void fuction1() //类的普通成员函数占用一个公有地址,即多个对象共享一个内存地址,{ //所以当程序编译之后,这个函数就有一个地址了,任何类的对象都可以访问这个地址
printf("%s\n","hello world");
printf("%s\n","1");
}
virtual void fuction2() //虚函数实现是需要靠虚函数表来访问
{
printf("%s\n","hello world");
printf("%s\n","2");
}
};
void main()
{
A *tmp=NULL;
tmp->fuction1(); //hello world
//1
tmp->fuction2(); //内存出错,指针赋值为NULL后,没有指向具体对象,因此虚函数表不知道是哪个对象访问
}
本文通过一个简单的C++示例介绍了类的普通成员函数与虚函数的调用方式及其区别。演示了当指针未指向有效对象时尝试调用虚函数将导致的错误。
2780

被折叠的 条评论
为什么被折叠?



