- 浏览: 34909 次
- 性别:
- 来自: 南京
最简单地说,类就是定义了一个新的类型和一个新作用域
每个类可以没有成员,也可以定义多个成员,成员可以是数据、函数或类型别名
一个类可以包含若干公有的、私有的和受保护的部分
创建一个类类型的对象时,编译器会自动使用一个构造函数来初始化该对象
构造函数一般就使用一个构造函数初始化列表来初始化对象的数据成员
在类内部,声明成员函数是必需的,而定义成员函数则是可选的,在类内部定义的函数默认为 inline
在类外部定义的成员函数必须指明它们是在类的作用域中
成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象
将关键字 const 加在形参表之后,就可以将成员函数声明为常量
const 成员不能改变其所操作的对象的数据成员,const 必须同时出现在声明和定义中,若只出现在其中
一处,就会出现一个编译时错误
在 C++ 中,使用访问标号来定义类的抽象接口和实施封装
程序的所有部分都可以访问带有 public 标号的成员。类型的数据抽象视图由其 public 成员定义
使用类的代码不可以访问带有 private 标号的成员。private 封装了类型的实现细节
可以在任意的访问标号出现之前定义类成员,如果类是用 struct 关键字定义的,则在第一个访问标号之
前的成员是公有的;如果类是用 class 关键字是定义的,则这些成员是私有的
除了定义数据和函数成员之外,类还可以定义自己的局部类型名字
类所定义的类型名遵循任何其他成员的标准访问控制
成员函数可被重载,只能重载本类的其他成员函数
在类内部定义的成员函数,将自动作为 inline 处理
可以显式地将成员函数声明为 inline
可以在类定义体内部指定一个成员为inline,作为其声明的一部分,也可以在类定义外部的函数定义上指
定 inline,在声明和定义处指定 inline 都是合法的
像其他 inline 一样,inline 成员函数的定义必须在调用该函数的每个源文件中是可见的,不在类定义
体内定义的 inline 成员函数,其定义通常应放在有类定义的同一头文件中
在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义
必须是完全相同的
可以声明一个类而不定义它:
class Screen; // declaration of the Screen class
这个声明,有时称为前向声明(forward declaraton),类的前向声明一般用来编写相互依赖的类
不完全类型(incomplete type)只能以有限方式使用:不能定义该类型的对象,不完全类型只能用于定义
指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数
在创建类的对象之前,必须完整地定义该类
类不能具有自身类型的数据成员
类的数据成员可以是指向自身类型的指针或引用
只有当类定义已经在前面出现过,数据成员才能被指定为该类类型,如果该类型是不完全类型,那么数据
成员只能是指向该类类型的指针或引用
定义对象时,将为其分配存储空间,但(一般而言)定义类型时不进行存储分配
定义了一个类类型之后,可以按以下两种方式使用:
1.将类的名字直接用作类型名
2.指定关键字 class 或 struct,后面跟着类的名字
类的定义分号结束,分号是必需的,因为在类定义之后可以接一个对象定义列表
通常,将对象定义成类定义的一部分是个坏主意
#include <string> #include <iostream> using namespace std; class Screen { public: typedef string::size_type index; // implicitly inline when defined inside the class declaration char get() const { return contents[cursor]; } // explicitly declared as inline; will be defined outside the class declaration inline char get(index ht, index wd) const; // inline not specified in class declaration, but can be defined inline later index get_cursor() const; // constructor with height and width Screen():height(0),width(0){} Screen(index h,index w):height(h),width(w) { cout << height << width << endl; } private: string contents; index cursor; index height, width; }; // inline declared in the class declaration; no need to repeat on the definition char Screen::get(index r, index c) const { index row = r * width; // compute the row location return contents[row + c]; // offset by c to fetch specified character } // not declared as inline in the class declaration, but ok to make inline in definition inline Screen::index Screen::get_cursor() const { return cursor; } class LinkScreen { Screen window; LinkScreen *next; LinkScreen *prev; }; class Y; //forward declaraton class X{ //Y y error! Y* y; }; class Y{ X x; }; int main() { Screen s1; class Screen s2; // inherited from C and is also valid in C++ struct Screen s3; // inherited from C and is also valid in C++ return 0; }
发表评论
-
析构函数 管理指针成员
2008-02-23 20:10 4409析构函数就是这样的一个特殊函数,它可以完成所需的资源回收,作为 ... -
复制构造函数
2008-02-19 00:36 5256只有单个形参,而且该形参是对本类类型对象的引用(常用 cons ... -
友元 static 类成员
2008-02-17 21:09 4561友元机制允许一个类将 ... -
名字查找 构造函数 explicit
2008-02-16 20:50 4027每个类都定义了自己的 ... -
成员函数 this指针 可变数据成员
2008-02-16 00:11 4148类的成员函数可以访问 ... -
输入输出IO
2008-02-12 22:00 4220每一个 IO 头文件都定义了 char 和 wchar_t 类 ... -
函数function
2008-02-12 21:57 3449函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形 ... -
语句(...)
2008-02-12 21:55 4220简单语句C++ 中,大多数 ... -
表达式
2008-02-12 21:52 3229表达式由一个或多个操 ... -
数组和指针
2008-02-12 21:48 5173数组是由类型名、标识符和维数组成的复合数据类型数组也是一种存储 ... -
标准库类型
2008-02-12 21:35 3094string 类型支持长度可变 ... -
变量和基本类型
2008-02-12 21:12 3980类型是所有程序的基础,类型告诉我们数据代表什么意思以及可以对数 ... -
Hello world续
2008-02-04 00:15 2922/*the first C++ program*/ #inc ... -
经典再现 Hello world
2008-02-03 01:54 3807语言:ANSI C++,即标准C++编译和运行环境:红旗 Re ...
相关推荐
Class对象的创建发生在类加载(java.lang.ClassLoader)的时候,JVM加载一个类的时候首先创建Class对象,然后创建这个类的每个实例的时候都使用这个Class对象。 Class对象的作用是: 1. JAVA 使用 Class 对象来...
ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...
Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取Class对象的三种方式。 方式1:通过Object类的...
定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...
一个Class对象对应的是一个类的信息。可以通过以下三种方式获取某个类或某个对象所对应的Class对象: 1. 使用Class类的静态方法forName:Class.forName("java.lang.string"); 2. 使用类的.class方法:String.class;...
在Java编程语言中,内部类(也称为嵌套类)是一种强大的工具,它可以提高代码的组织性和可读性。内部类可以直接访问外部类的所有成员,包括私有(private)成员,这使得它们在处理封装和实现特定逻辑时非常有用。...
8.访问类的成员 使用反射,我们可以通过Class对象访问类的静态成员和非静态成员。例如,获取和设置类的字段值: ```java Field field = Point.class.getField("x"); field.setAccessible(true); // 如果字段是私有...
换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象...
在Java编程中,工具类(Util Class)是包含各种实用函数的静态类,它们提供了一种简化常见任务的方法。在给定的`UtilClass`中,我们有五个主要的工具类:`StringUtil`、`FileUtil`、`ConnectDB`、`DateUtil`和`...
`Class`类还提供了一个静态方法`forName`,可以根据类的全限定名获取`Class`对象。 ```java Class<?> clazz = Class.forName("org.whatisjava.reflect.Foo"); ``` 如果指定的类尚未被加载,则此方法会先加载...
"Xml文件自动生成C# Class类"这个主题就涉及到了这一过程。这里我们将详细探讨如何实现这一功能,以及它在实际开发中的应用。 首先,XML文件是一种基于文本的数据存储格式,具有良好的可读性和结构化特性。它可以...
在这种需求下,出现了专门用于反编译Java字节码的工具,例如XJad,它是一个古老的类反编译器,可以将`.class`文件转换回`.java`源代码格式。 首先,我们需要理解Java的编译过程。当开发者编写完`.java`源代码后,会...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
"类反编译工具"是一种专门用于将`class`文件转换回接近源代码形式的文本工具。它们可以揭示隐藏在二进制`class`文件中的方法、字段、常量池等信息,帮助开发者理解程序的工作原理,找出潜在的bug,或者分析第三方库...
当我们谈论"一个PHP的类(class_mysql)"时,我们可以理解这是一个专门用于处理MySQL数据库操作的自定义PHP类。此类可能包含了一系列的方法,用于执行常见的数据库任务,如连接、查询、插入、更新和删除数据等。 `...
ClassGraph是一款强大的Java工具,专为开发者设计,用于执行高效、快速且并行的类路径扫描。这款开源库提供了一种灵活的方式,帮助开发者轻松地探索、分析和管理应用程序的类结构。它不仅适用于常规的类扫描任务,还...
在PHP开发中,数据库操作是不可或缺的一部分,而DbClass是一个常用的PHP数据库操作类,它封装了常见的数据库查询、增删改查等操作,使得开发者能够更高效、安全地与数据库进行交互。DbClass通常会支持多种数据库系统...
首先,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为 Java 不支持多继承)。但是,一个类却可以实现多个 interface。其次,在 abstract class 的定义中,我们可以赋予方法...
"风声无组件上传类UpLoadClass" 是一个专为实现这一功能而设计的类库,其核心特点是无需额外安装任何组件,使用简单便捷。在本文中,我们将深入探讨UpLoadClass的原理、使用方法以及它如何简化文件上传的过程。 ...
"Class类查看工具"就是这样的一个实用工具,它允许我们查看、解析和理解Java字节码,从而更好地理解程序运行时的内部机制。这类工具对于调试、优化代码以及学习Java虚拟机(JVM)的工作原理非常有帮助。 在Java编程...