类的前向声明与调用
2015-07-09 22:06
176 查看
类的声明与变量的声明类似,如:
注:声明一个类的时候,不占用任何存储空间(不知正确与否,看到网上好多人这么说。用sizeof试验时,sizeof(A)是不能通过编译的)。
下面通过实例来进行说明类的前向声明与调用问题:
总之一句话:不管是变量还是函数,调用之前都需要定义!!!
int a; // 定义一个变量或声明一个变量 class A; // 声明一个类,类名为A
注:声明一个类的时候,不占用任何存储空间(不知正确与否,看到网上好多人这么说。用sizeof试验时,sizeof(A)是不能通过编译的)。
下面通过实例来进行说明类的前向声明与调用问题:
#include<iostream> using namespace std; class A1; // 声明类,类名为A1 class A2; // 声明类,类名为A2 class A { public: double funA(double x) { cout<<"funA of class A called."<<endl; return x*x; } double funB(double x) { A1 *q; return q->funA(4); // 此处引用是非法的,因为在调用A1类的funA函数之前, // 没有定义该函数,所以会报错 } void funAA(); A1 *p; // A1 aa; // 只能是指向这个类型的指针或引用 // 此处定义一个A1类的aa对象的时候,就需要调用构造函数, // 而此时,A1类还是一个不完整的类(没有构造函数),所以会报错 }; class A1 { public: double funA(double x) { cout<<"funA1 of class A called."<<endl; return 4*x*x; } }; void A::funAA() { cout<<p->funA(4)<<endl; // 因为前面定义了类A1,而且定义了funA函数, // 所以此处p->funA()是合法的 } void main() { A obja; obja.funAA(); // cout<<"sizeof(A2) is "<<sizeof(A2)<<endl; // 编译不能通过,错误提示:使用了未定义类型“A2” }
总之一句话:不管是变量还是函数,调用之前都需要定义!!!
相关文章推荐
- 看名字测缘分、名字测身价
- spark安装常见错误
- Python项目四:新闻聚合
- android 使用代码实现 RelativeLayout布局
- 门面模式 Facade
- 【生活】--今天我给我想娶的人写了一份邮件
- scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
- [图像]获取图片中感兴趣区域的信息(Matlab实现)
- php函数中使用html的一种用法
- 神经网络特征可视化
- SpringMVC+Spring+MyBatis环境搭建
- 南阳oj 题目67 三角形面积
- 黑马程序员_java 面向对象的理解
- android HttpEntity的作用
- Input.GetAxis();
- jQuery网上学习资料推荐
- 我所理解的设计模式(C++实现)——装饰者模式(Decorator Pattern)
- 设计模式-工厂模式
- Copy Constructor 的建构操作
- 熵