- 浏览: 33916 次
- 性别:
- 来自: 南京
最简单地说,类就是定义了一个新的类型和一个新作用域
每个类可以没有成员,也可以定义多个成员,成员可以是数据、函数或类型别名
一个类可以包含若干公有的、私有的和受保护的部分
创建一个类类型的对象时,编译器会自动使用一个构造函数来初始化该对象
构造函数一般就使用一个构造函数初始化列表来初始化对象的数据成员
在类内部,声明成员函数是必需的,而定义成员函数则是可选的,在类内部定义的函数默认为 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 4357析构函数就是这样的一个特殊函数,它可以完成所需的资源回收,作为 ... -
复制构造函数
2008-02-19 00:36 5201只有单个形参,而且该形参是对本类类型对象的引用(常用 cons ... -
友元 static 类成员
2008-02-17 21:09 4488友元机制允许一个类将 ... -
名字查找 构造函数 explicit
2008-02-16 20:50 3936每个类都定义了自己的 ... -
成员函数 this指针 可变数据成员
2008-02-16 00:11 4116类的成员函数可以访问 ... -
输入输出IO
2008-02-12 22:00 4168每一个 IO 头文件都定义了 char 和 wchar_t 类 ... -
函数function
2008-02-12 21:57 3389函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形 ... -
语句(...)
2008-02-12 21:55 4162简单语句C++ 中,大多数 ... -
表达式
2008-02-12 21:52 3162表达式由一个或多个操 ... -
数组和指针
2008-02-12 21:48 5108数组是由类型名、标识符和维数组成的复合数据类型数组也是一种存储 ... -
标准库类型
2008-02-12 21:35 3027string 类型支持长度可变 ... -
变量和基本类型
2008-02-12 21:12 3896类型是所有程序的基础,类型告诉我们数据代表什么意思以及可以对数 ... -
Hello world续
2008-02-04 00:15 2847/*the first C++ program*/ #inc ... -
经典再现 Hello world
2008-02-03 01:54 3722语言:ANSI C++,即标准C++编译和运行环境:红旗 Re ...
相关推荐
定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...
换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象...
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译
换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的 Java虚拟机(JVM)首先检查这个类的Class对象...
一个PHP 的类(class_mysql) 有要的人请自己下载。帮助别人就是帮助自己,希望大家都能尽量帮助别人,o(∩_∩)o...哈哈
email.class PHP邮箱类,用来进行邮箱校验、注册等。一个PHP类文件。email.class PHP邮箱类,用来进行邮箱校验、注册等。一个PHP类文件。
private-class保护类私有属性的一个模块
1.不管你网站有多大,且有多少个class,用此方法之后每个类只需要实例化一次(除非你重启了服务器),听起来有点类似"一次变异长久执行的味道",以往的做法是每个class在客户端每次刷新的时候都要重新用 $实例=New 类名();...
c++设计的日期类,包含以下方法:设置日期,加上一个天数获得另一个日期,求两个日期相差的天数,计算某天是星期几。(新手,不足之处,请多多指教)
SVM用于一类问题的代码-oneclasssvm.m 看到有人需要一类SVM,实际上就是聚类SVM,可以应用于离群点检测,或在只拥有一类数据下判定新数据是否属于此类。 请注意代码是求解一个2次规划问题,因此适用于维数不是太...
jquery-scrollAddclass是一款可以在页面滚动时为元素动态添加class类的jquery插件。你可以定制自己的class类,使元素在进入视口时产生指定的动画效果。
A Simple Dash-Line Class一个简单的虚线类(4KB)
本文介绍了使class不能被实例化一种方法。
众所周知,java编译后的class文件是一种中间字节码文件, 很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式, 但这样会带来很多麻烦,而且也不能真正保护class文件, 很多工具是对class...
Class Dependency Analyzer (CDA) 是一个免费的,通过分析Java class文件(Apache Commons BCEL™ -Byte Code Engineering Library)来学习类之间依赖关系的工具。 它可以在以下不同的级别上分析依赖关系:一个单独...
一个矩阵处理类,matrix.h,包括几个示例
class基本语法和class的继承, class只是一个语法糖,类的所有方法都定义在类的prototype属性上,本质是通过ES5的原型链继承实现的。
本文提供了针对视觉识别的单类别分类OCC的经典统计和基于深度学习的最新方法的全面调研。...单类别分类(One-Class Classification,OCC)是多类别分类的一种特殊情况,其中训练期间观察到的数据来自单个阳性类。
json的class类,jar包
Classie 是一个轻量级的脚本,可以让你很容易地添加、移除、切换和检查 DOM 中的类。 标签:Classie