关于C++前置声明的补充
来源:互联网 发布:js隐藏控件 编辑:程序博客网 时间:2024/06/15 21:59
之前在namespace中我已经提到过前置声明,当一个类需要用到另一个类并且只是需要指针时,我们可以使用前置声明即可
class A{private: B *b;};class B{};
这里类A是在类B前面,编译器编译类A时会报错,因为类A中使用类B,虽然只是指针,但是也是提到了类B,而这个很简单,只需要在类A前面声明类B存在即可class B;class A{private: B *b;};class B{};
当然这样只是能创建类B的指针,前面也提到过如果类A要使用类B的内容,如果是在同一个文件中就把类B写在类A的前面,如果是工程文件,则类A的头文件class类B,类A的cpp文件include类B的头文件,这都是我上次提到过的,这里就不说了。这次要补充的是其实在第一种中可以更加具体的,而不是说必须要把类B写在类A的前面,比如我下面的代码
#include<iostream>using namespace std;class B;class A{private: B *p=NULL;public: A(B *b); ~A(){} void Print();};A::A(B *b){ p=b;}class B{private: int b;public: B(int b=0); ~B(){}; void get();};void A::Print(){ p->get();}B::B(int b){ this->b=b;}void B::get(){ cout<<"类B的某个对象的参数为b的值为"<<b<<endl;}int main(){ int x; cin>>x; B b(x); A a(&b); a.Print(); return 0;}很显然可以发现类A中的函数Print()通过类B的对象指针调用了类B的函数,但是类B确实是在类A后面,在类A前面只是有类B的前置声明,仔细点就可以发现类A的Print()函数并不是内联函数或者说是在类B的声明前面,Print()函数在类B的声明之后,根据编译器编译的顺序,在编译类A的Print()函数定义时类B已经声明了,所以已经可以访问类B的具体内容了,所以这种写法是正确的。
阅读全文
0 0
- 关于C++前置声明的补充
- 关于C++ 前置声明的说明
- 关于前置声明
- 关于前置声明
- 前置声明的使用
- C++的前置声明
- C++的前置声明
- 前置声明的使用
- 前置声明的危险
- C++的前置声明
- c++的前置声明
- typedef 的前置声明
- 类的前置声明
- 类的前置声明
- c++的前置声明
- 关于C++中的前置声明
- 关于C++中的前置声明
- 关于C++中的前置声明
- iscsi
- 袁萌:收到南京大学录取通知书的那一瞬间
- 双机通信协议
- Grip的使用(一)连接数据库
- Java异常处理机制
- 关于C++前置声明的补充
- Java中的信号量Semaphore
- NPOI的总结
- linux notify 通知在TP中的应用
- Spring 利用jdbcTemplate 实现CRUD
- x264码率控制
- 转换阵地去wordpress
- 6.常用控件(三) 之 ProgressBar控件-handler及RadioButton
- 242. Valid Anagram