组合类,友元函数 ,内部类,

在我前前面已经说过组合类的概念了,今天我再介绍两个类,友元,以及内部类。

组合类,就是一个类中有另一个类的对象,如声明一个class  penson,成员变量有姓名,年龄,出生日期等,在声明一个date类,这个类里面就是存的年月日的信息,因此我们可以将person类的出生日期设为date类,这就构成了一个组合类。

友元的概念,就像是我们的朋友,比如说  小红说小明是她的朋友,那么对于小红来说,小明肯定有别人所没有的特权(为什么是段子手小明啊 ,老王呢?)因此,类举到我们的类中,就是说,一个类可以把另一个类当成朋友,给予他访问自己成员变量的权利(包括私有成员变量,还真是推心置腹啊,没有一点秘密)。那么另一个类,在自己的类中就可以访问刚才那个类的变量。

友元还有一种概念是友元函数,类似于友元类。其实,友元类里面的每个方法都是一个友元函数,读者自行脑补。

友元的特征,不能传递(朋友的朋友不一定是朋友),不能交换(你把他当朋友,他不一定把你当朋友,在这就是他不把你当朋友),不能继承(你爸爸的朋友不一定是你的朋友)

友元类的使用时机:

友元虽然可以访问类的成员变量,但是他打破了类的封装,因此不建议这样做。

在运算符的重载是会用到友元类

在类与类之间要共享资源的时候

友元函数的参数问题(友元函数无this指针)有3种情况:

1、要访问非静态成员时,需要对象做参数;

2、要访问静态成员或全局变量时,不需要对象做参数;

3、如果做参数的对象是全局的,则也不需要对象做参数

内部类,内部类也叫做嵌套类。我个人很喜欢将其称为内部类,顾名思义,就是在一个类的中间定义另一个类。里层和外层类访问的规则是,互相可以访问公有成员。

在定义内部类前面要加上public,(类成员默认私有,不加系统默认为实声明了一个私有的内部类),内部类不可以直接访问外部类的成员,一种方法是通过外部类的对象,一种方法是静态访问即:外部类名::外部类静态成员访问

类的成员的访问方法(类外:public)

方法一:对象名.成员(变量或者函数)

指针变量à成员(变量或者方法)

(*指针变量).成员(变量或者方法)

方法二:类名::成员(变量或者函数)

时间: 2024-11-10 16:44:52

组合类,友元函数 ,内部类,的相关文章

C++:友元(非成员友元函数、成员友元函数、友元类)

3.8  友元:友元函数和友元类 友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数.友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的成员,包括私有成员.保护成员和公有成员.在类中声明友元函数时,需在其函数名前加上关键字friend,此声明可以放在公有部分.也可以放在保护和私有部分.友元函数可以定义在类部,也可以定义在类的外部. 3.8.1 将非成员函数声明为友元函数 //1.将非成员函数声明为友元函数 // 例3.33 友元函数

模板类的友元函数

非模板友元函数 模板类的非模板友元函数是说该模板类的友元函数只是一个普通函数,并且该函数是非模板函数或该函数不视为模板函数.这里包含了两种情况,下面分别就两个例子进行说明. • 函数是非模板函数 这一类友元函数特点是不带有参数列表,例如:friend void Fn().这类友元函数通常可以用于全局对象的访问. #include <iostream> using namespace std; template <class T> class MyNumber { private:

不可或缺 Windows Native (20) - C++: 友元函数, 友元类

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 友元函数 友元类 示例演示友元函数, 友元类CppClass4.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppClass4 { public: string Demo(); }; } CppClass4.cpp /* * 友元(friend)函数, 友元类 * * 友元函数: C+

【C/C++】友元函数

为什么要使用友元函数? 在实现类之间数据共享时,减少系统开销,提高效率 如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数 为了使其他类的成员函数直接访问该类的私有变量.即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数.此时可使用友元类 友元函数是全局函数还是类的成员函数 友元函数既可以是全局函数也可以是某个类的成员函数 哪些情况下使用友元函数 运算符重载的某些场合需要使用友元(因为运算符要访问类中的成员变量) 两个类要共

C++之友元函数

1.友元函数的一般形式: friend <返回类型> <函数名>(<参数列表>): class B { public: friend void func(); //友元函数 protected: int b; }; void func() { } 2.注意点: 类中通过使用关键字friend 来修饰友元函数,但该函数并不是任何类的成员函数,其声明可以放在类的私有部分,也可放在共有部分.友元函数的定义在类体外实现,不需要加类限定. 一个类中的成员函数可以是另外一个类的友元

static 类中的静态成员,组合类,友元函数 ,内部类

static 表示静态的意思 在c++中有两种表示 ,静态成员变量和静态成员函数 一个类中的静态成员只属于当前类,不属于某个对象.一个类的静态成员只有一份由当前类所有,每个对象都可以访问静态成员,当然也可以通过类名来访问 这里推荐用类名::静态成员来访问 static 成员函数应该在所有的成员函数之外初始化 如果不初始化系统默认为0 static 成员函数只能访问static成员 static成员函数  ,函数体内不能使用this指针 在我前前面已经说过组合类的概念了,今天我再介绍两个类,友元,

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

还是用一个例子来说明吧 1 #define unsigned int UINT32 2 3 class RMB 4 { 5 public: 6 RMB(UINT32 d, UINT32 c); 7 friend RMB operator +(RMB&, RMB&); 8 friend RMB& operator ++(RMB&); 9 void display() 10 { 11 cout<<(yuan + jf / 100.0)<<endl; 12

【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a = a; this->b = b; } //成员函数 Test &Gadd2(Test &t2) { this->a = this->a + t2.a; this->b

模板类的约束模板友元函数:template friend functions

本来这篇博客是不打算写的,内容不是很难,对于我自己来讲,更多的是为了突出细节. 所谓template friend functions,就是使友元函数本身成为模板.基本步骤:1,在类定义的前面声明每个模板函数.eg:template <typename T> void counts(); template <typename T> void report<>(T &);2,在类声明中再次将模板声明为友元. template <typename TT>