C++ and OO Num. Comp. Sci. Eng. - Part 5.
类
class 关键字提供了一种包含机制,将数据和操作数据的方法结合到一起,作为内置类型来使用。
类可以包含私有部分,仅其成员和 friend 类访问,公有部分可以在程序中任意位置处访问。
构造函数与类重名。析构函数用来定义对象销毁时操作。
class pt2d { // class for 2D points
private: // private members
double x; // x coordinate
double y; // y coordinate
public: // public members
pt2d(double r, double s) { // constructor
x = r; y =s;
}
void move(double, double); // move to new position
void move(pt2d); // move to new position
void draw() const; // a const member
friend double norm(pt2d); // a friend
};
在类的定义中,符号 :: 用来在类外部定义成员。
const 后缀定义的方法只能读取成员变量,但是不能对成员变量进行修改。
在类的方法中,可以直接使用属性名对属性值进行操作,而其他对象的属性则需用 . 号对其进行索引。
友元(friend)不属于类,但是可以访问类的成员。
在函数声明中定义的函数默认为 inline 函数。
对私有属性的保护使得自定义类更加安全,也更容易维护。
可以提供多个构造函数,程序会按照参数选择对应的构造函数进行操作。
没有参数的构造函数为默认构造函数。
struct 是默认类型都为 public 的类。
关键字 this 为一常指针指向方法所对应的对象。
Copy Constructors and Copy Assignments
通常情况下,当类中没有显式定义 copy constructor 与 assignment operator 的话,会默认生成一个对逐个成员进行复制的初始化方法。
销毁对象时,析构函数不需要用户显式进行调用,申请的空间会自动销毁。
但是若类中包含指针,且多个对象内指针指向同一个向量,因此这个向量会被销毁多次,造成错误。
operator 作为关键字允许类对操作符=进行重载,例如
T& T: :operator=(const T&);
this 为指向对象的向量,因此 *this 为对象实体。
Firend
友元可以属于许多类里,并且可以访问类的私有成员和属性。
友元不是类成员因此没有 this 指针。
一个类可以是其他类的友元,因此此类的所有方法都是友元。
class X{
void f();
int g(int);
};
class Y{
// ... in addition to other members
friend void X::f(); // f() of X becomes friend of Y
};
class Z{
// ... in addition to other members
friend class X; // all functions of X become friends of class Z
};
Static Members
C++ 提供静态成员来避免全局变量的使用。
静态方法,当一个函数需要访问类的成员,但是不属于特定的对象时,可以声明为静态方法。
由于静态成员不属于特定的对象,因此其引用必须用类名称与双冒号进行索引。
静态变量的定义与变量的声明与初始化相同,也类似与函数的声明。
尽管静态变量的私有的,但是它可以不通过成员函数定义。
Constant and Mutable Members
constant 成员方法不修改类型的对象。
当一个成员变量声明为 mutable 时,它可以由常成员方法进行修改。
Class Objects as Members
一个类可以作为其他类的成员变量,而这个变量初始化可以与其他成员不同。
成员对象初始化通过构造函数内的初始化列表内实现。
构造成员对象的初始化在类自身的构造函数之前调用,例如
class line{
pt2d oneend;
pt2d otherend;
bool direction;
public:
line( pt2d, pt2d, bool );
line( pt2d, bool );
}
line:: line( pt2d a, pt2d b, bool dir ): otherend(b), oneend(a) {
direction = dir;
}
line: :line (pt2d b, bool dir): oneend(), otherend(b) {
direction = dir;
}
Array of Classes
当类有默认构造函数时,可以定义此类的向量。
当类没有默认构造函数时,则无法直接定义此类的向量。
Pointers to Members
C++ and OO Num. Comp. Sci. Eng. - Part 5.的更多相关文章
- C++ and OO Num. Comp. Sci. Eng. - Part 4.
命名空间与文件(Namespaces and Files) 在 C++ 中,命名空间为包含相关声明与定义的逻辑单元. 将一个大程序分割为不同部分并且将其储存在不同的文件中可以实现模块化编程. 未命名的 ...
- C++ and OO Num. Comp. Sci. Eng. - Part 3.
2. Expressions and Statements 声明是将一个种类型的变量引入程序的语句. 作用域 作用域又一对花括号限定,在所有花括号之外的为全局作用域. 在作用域内声明的变量为局部变量. ...
- C++ and OO Num. Comp. Sci. Eng. - Part 2.
本文参考自<C++ and Object-Oriented Numeric Computing for Scientists and Engineers>. 1. Basic Types ...
- C++ and OO Num. Comp. Sci. Eng. - Part 1.
本文参考自 <C++ and Object-Oriented Numeric Computing for Scientists and Engineers>. 序言 书中主要讨论的问题是面 ...
- 2008 SCI 影响因子(Impact Factor)
2008 SCI 影响因子(Impact Factor) Excel download 期刊名缩写 影响因子 ISSN号 CA-CANCER J CLIN 74.575 0007-9235 NEW E ...
- 2012年中国科学技术信息研究所发布自然科学SCI(E)论文期刊分区列表
分区 期刊名称 ISSN 学科名称 学科名称(中文) 总被引频次 影响因子 5年影响因子 即年影响因子 被引半衰期 特征因子 论文影响指标 1区 ACM COMPUT SURV 0360-0300 C ...
- 软件工程卷1 抽象与建模 (Dines Bjorner 著)
I 开篇 1. 绪论 II 离散数学 2. 数 (已看) 3. 集合 4. 笛卡尔 5. 类型 6. 函数 7. λ演算 8. 代数 9. 数理逻辑 III 简单RSL 10. RSL中的原子类型和值 ...
- 2015影响因子Excel版
现在终于有影响因子2015的Excel版了,这个版本除了还包括杂志全称和缩写等基本信息还,包括中科院分区, 应该是迄今2015影响因子最奢华的版本了吧. 看了这个版本,发现中国的SCI杂志还是不少的, ...
- 基于 MySQL 的数据库实践(准备工作)
背景 本学期在北京大学选修了<数据库概论>的实验班课程,由于 SQL 语法并不是特别理论的内容,因此课上暂时也没有特别展开.出于探索数据库领域的兴趣,使用国内普遍使用的数据库软件 MySQ ...
随机推荐
- ORB_SLAM3 -- 配置安装
安装环境 Ubuntu20.04 ORB_SLAM3依赖项安装 opencv3 ORB_SLAM3可用opencv3或opencv4编译,作者这里安装测试了opencv3 Step1: 安装openc ...
- 2021.8.16考试总结[NOIP模拟41]
T1 你相信引力吗 肯定是单调栈维护.但存在重复值,还是个环,不好搞. 发现取区间时不会越过最大值,因此以最大值为断点将环断为序列.在栈里维护当前栈中有多少个与当前元素相等的元素,小分类讨论一下. 最 ...
- linux shell 基本语法之快速上手shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Machine learning(1-Introduction)
1.What is machine learning Field of study that gives computers the ability to learn without being ex ...
- 正则表达式匹配 牛客网 剑指Offer
正则表达式匹配 牛客网 剑指Offer 题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次). 在本题中, ...
- python生成有声小说模拟真人发音
生成有声小说原理 文字是1500字内的生成微软文档说说 用代码实现小说爬取正本 实现每章小说1450字 实现自动剪切后添加封面 实现自动上传 用python代码实现爬取小说,本案列以一本小说为实列代码 ...
- 算法学习->求解三角形最小路径及其值
00 问题 00-1 描述 对给定高度为n的一个整数三角形,找出从顶部到底部的最小路径和.每个整数只能向下移动到与之相邻的整数. 找到一个一样的力扣题:120. 三角形最小路径和 - 力扣(LeetC ...
- 使用jax加速Hamming Distance的计算
技术背景 一般认为Jax是谷歌为了取代TensorFlow而推出的一款全新的端到端可微的框架,但是Jax同时也集成了绝大部分的numpy函数,这就使得我们可以更加简便的从numpy的计算习惯中切换到G ...
- 《手把手教你》系列技巧篇(三十九)-java+ selenium自动化测试-JavaScript的调用执行-上篇(详解教程)
1.简介 在做web自动化时,有些情况selenium的api无法完成,需要通过第三方手段比如js来完成实现,比如去改变某些元素对象的属性或者进行一些特殊的操作,本文将来讲解怎样来调用JavaScri ...
- 【Python+postman接口自动化测试】(2)什么是接口?
接口的概念 接口又称API(Application Programming Interface,应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的 ...