关闭

类的前向声明与调用

标签: C++前向声明
319人阅读 评论(0) 收藏 举报
分类:

类的声明与变量的声明类似,如:

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”
}

总之一句话:不管是变量还是函数,调用之前都需要定义!!!


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

深入学习C++前向声明

1.我们为什么需要前向声明? 2.前向声明的几点事项 前向声明不能声明被typedef 的类型明,可以前向声明其他命名空间类型,可以前向声明模版,前向声明是指声明一个在其他中文件定义的类型,一种不完全声明,前向声明时不能含有未声明类型,但可以包含前向声明,所有前向声明需共同遵守前向声明的使用规则,我...
  • zjq2008wd
  • zjq2008wd
  • 2013-12-19 15:44
  • 4128

C++回顾之前向声明、嵌套类、局部类

关于前向声明,嵌套类,局部类的使用。
  • ab198604
  • ab198604
  • 2014-02-06 11:11
  • 2269

Scala--样例类(case)详解

概述: case类在模式匹配和actor中经常使用到,当一个类被定义成为case类后,Scala会自动帮你创建一个伴生对象并帮你实现了一系列方法且带来了不少好处,如下: 1.实现了apply方法,意味着你不需要使用new关键字就能创建该类对象 scala> case class Peopl...
  • hany3000
  • hany3000
  • 2016-05-02 02:24
  • 322

C#入门8.1——方法的声明及调用(1)

方法为什么会存在? 迄今看到的代码块都是单个代码块形式实现的,其中包含一些重复执行的循环代码以及有条件的执行的分支语句。如果要对数据执行某种操作,就应把所需要的代码放在合适的位置。 如果有大量重复性操作该怎么办?需要修改时呢? 方法概述: 方法是一种用于实现可以有对象(或类)执行的计算机或操作的...
  • QPC908694753
  • QPC908694753
  • 2016-08-14 11:41
  • 677

前向声明的局限性

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。 比如class foo; 声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(in...
  • linux_wgl
  • linux_wgl
  • 2014-08-24 13:28
  • 613

swift -类的定义及使用

// // main.swift // ClassDemo-06 // import Foundation println("Hello, World!") //类的定义 Person 名字 class Person{ //定义一个字段 年龄 var ...
  • u012701023
  • u012701023
  • 2015-08-14 08:06
  • 2086

C++ 类前向声明

在一个群内看到的消息,关于类的前向声明: 前向引用声明,在提供一个完整的类声明之前,不能声明该类的对象;可以做函数参数 或者声明对象指针;class A并不是真正意义声明A类,只是告诉编译器,从现在开始碰到的符号A是一个类,以保证符号识别。因此使用A a;编译器不知道类A有没有构造函数,也...
  • tracyliang223
  • tracyliang223
  • 2014-03-10 09:51
  • 931

关于类的前向声明

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。 比如class foo; 声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类...
  • Virtual_Func
  • Virtual_Func
  • 2015-11-11 22:59
  • 240

C++12.1.4 类的前向声明、不完全类型类

简介 在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的 将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。使用头文件保护符,来保证即使头文件在同一个文件中被包含多次,类定义也只出现一次。 只声明却没有定义的类称为————...
  • hlsdbd1990
  • hlsdbd1990
  • 2015-06-18 10:24
  • 1015

关于类的前向声明

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。 比如class foo; 声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(inco...
  • educast
  • educast
  • 2013-11-04 09:20
  • 695
    个人资料
    • 访问:29703次
    • 积分:662
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:9篇
    • 译文:0篇
    • 评论:0条
    文章分类