cprimer学习笔记4
?
C++Primer PLus 第五版读书笔记4(终篇)
分类:?IT书籍读书笔记2012-08-28 01:39?1916人阅读?评论(2)?收藏?举报读书c++exceptionstringiostream
友元??? 类并非只能拥有友元函数,也可以将类作为友元。在这种情况下,友元类的所有方法都可以访问原始类的私有成员和保护成员。另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元。有一些函数、成员函数或类为友元只能是由类定义,而不能从外部强加友情。因此,金光友元被授予从外部访问类的私有部分的限制,但他们并不与面向对象的编程思想相悖;相反,他们提高了公有接口的灵活性。
?
嵌套类??? 在c++中,可以将类声明放在另一个类中。在另一个类中声明的类被称为嵌套类(nested class),他通过提供新的类型作用域来避免名称混乱。包含类的成员函数可以创建和使用被嵌套类的对象;而仅当声明位于公有部分,才能在包含类的外面使用嵌套类,而且必须使用作用域解析操作符。
1.嵌套类的访问权限??? 有两种访问权限适合于嵌套类。首先,嵌套类的声明位置决定了嵌套类的作用域,即他决定了程序的哪些部分可以创建这种类的对象。其次,和其他类一样,嵌套类的公有部分、保护部分和私有部分控制了对类成员的访问。在哪些地方可以使用嵌套类以及如何使用嵌套类,取决于作用域和访问控制。??? 如果嵌套类是在另一个类的私有部分声明的,则只有后者知道他。派生类不能直接访问基类的私有部分。??? 如果嵌套类是在另一个类中到的保护部分声明的,则他对于后者来说是课件的,但是对于外部世界则是不可见的。不过,在这种情况中,派生类将知道嵌套类,并可以直接创建这种类型的对象。??? 如果嵌套类是在另一个类中的公有部分声明的,则允许后者、后者的派生类以及外部世界使用它,因为他是公有的。不过,由于嵌套类的作用域为包含它的类,因此在外部世界使用它时,必须使用类限定符。
[cpp]?view plaincopyprint?
//?testNestedClass.cpp?:?定义控制台应用程序的入口点。??
//??
??
#include?stdafx.h??
#include?iostream??
using?namespace?std;??
??
class?Test??
{??
public:??
????Test(?int?a,?int?b?)??
????{??
????????m_a?=?a;??
????????m_b?=?b;??
????}??
????void?show()??
????{??
????????cout??this?class?Test?a?value?is:??m_a??endl;??
????????cout??this?class?Test?b?value?is:??m_b??endl;??
????}??
????void?newNestedClass(?double?a,?double?b?)??
????{??
????????NestedClass(?a,?b?).show();??
????}??
????class?NestedClass??
????{??
????public:??
????????NestedClass(?double?a,?double?b?)??
????????{??
????????????m_NestedClass_a?=?a;??
????????????m_NestedClass_b?=?b;??
????????}??
????????void?show()??
????????{??
????????????cout??this?class?NestedClass?a?value?is:??m_NestedClass_a??endl;??
????????????cout??this?class?NestedClass?b?value?is:??m_NestedClass_b??endl;??
????????}??
????private:??
????????double?m_NestedClass_a;??
????????double?m_NestedClass_b;??
????};??
private:??
????int?m_a;??
????int?m_b;??
};??
??
int?_tmain(int?argc,?_TCHAR*?argv[])??
{??
????Test?test(?7,?14?);??
????test.show();??
??
????test.newNestedClass(?10.7,?10.14?);??
??
????T
原创力文档

文档评论(0)