初学C++——郑莉老师的课 第四章 前向引用声明/UML语言/struct大纲/union大纲/枚举类

前向引用申明

在一个类中引用另外一个类,比如说,用另外一个类的类型名作为函数的参数类型,那么在第二个类中也引用第一个类。那不就相互矛盾了吗?因为在引用一个类的时候,必须让编译器已经见过这个类的声明,不然编译器不知道这个类是什么,那就编译报错,引用不成功,当两个雷互相声明的时候,把谁写在前面,把谁写在后面呢?

——前向引用声明就是在某种程度上解决这个问题的。

如果需要再某个类的声明之前,引用该类,则应该进行前向引用申明。前向引用申明只为程序加入一个标识符,但具体声明在其他地方。举例如下:

class B;//前向引用申明
class A
{
pulic:
	void f(B b);
};

class B
{
public:
	void g(A a);
};

前向引用申明注意事项:

  • 在提供一个完整的类声明之前,不能声明该类的对象,也不能在内联成员函数中使用该类的对象
  • 当使用前向引用声明时,只能使用被声明的符号,而不能涉及类的任何细节。

例子:

class Fred;
class Barney
{
	Fred x;//错误:类Fred的声明不完善,不能使用类的对象,Fred占多少字节都不清除,就没办法定义Fred类的对象
};

class Fred
{
	Barney t;
};
那这一类问题怎么办?以后会讲到。(前向引用什么不是万能的)

UML语言

三个组成部分:事务、关系、图。











Struct结构体

继承了C语言的结构体,但是在C++中结构体是一种特殊形态的类。与类的唯一区别:类的缺省访问权限是private,但是结构体的缺省访问权限是public。

什么时候需要用到结构体而不用类呢?

——当我们需要表示一组集成在一起的数据,而基本上没有太多的函数操作时,或者有的时候需要把一些数据集成一个新的类型,又希望外部能比较访问时,可以选择结构体。

结构体定义:

struct 结构体名称
{
    公有成员
protected:
    保护性成员
private:
    私有成员
};

在C++中,结构体的成员既可以是数据成员,也可以是函数成员(在以前C中,结构体只能定义数据成员)

结构体的初始化

当一个结构体的全部数据成员都是公有成员,并且没有用户定义的构造函数,没有基类和虚函数时,

可以按照以下语法进行初始化:

类型名 变量名={成员数据1初值,成员数据2初值,...};

比如:

struct Student//定义一个结构体,默认都是public成员
{
	int num;
	string name;
	char sex;
	int age;
};

int main()
{
	Student stu = { 9001,"Lin Lin",'F',19 };
	cout << "Num:" << stu.num << endl;//都是公有成员,可以直接用对象名点的方式直接访问
	cout << "Name:"<< stu.name << endl;
	return 0;
}

union大纲

与类、结构体的最大的差异是:联合体的目的是存储空间公用!

定义形式:

union 结构体名称
{
    公有成员
protected:
    保护性成员
private:
    私有成员
};

但是这些成员不是同时存在,同时作用的。所有的成员公用相同的内存单元,所以任何两个成员不可能同时有效。比如说,一个人的成绩,只能选择A/B/C,或者90、80分,或者及格/优秀等.

举例说明:

union  Mark
{
	char grade;//等级制的成绩
	bool pass;//只记录是否通过课程
	int percent;//百分制的成绩
};

实际上,这个联合体对象将占用int类型字节大小的存储空间,如果int是四个字节,这个Mark就是占四个字节,char和bool都只占单个字节,公用存储空间时,就按照最多字节数的成员分配空间。当你存入一个新的数据时,原来存入的数据就会被替代掉。

无名联合体:(只是规定成员公用内存空间)

union  
{
	int i;
	float f;//i和f公用内存空间
};

i = 10;//在程序中可以这样使用
f = 2.2;//给i赋值后,紧接着给f赋值,那么i中的数据就被冲掉了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值