C++沉思录笔记 —— 序幕
public:
void print(const char* s) { printf("%s\n", s); }
};
int main(int argc, char const *argv[])
{
Trace t; t.print("begin main()");
//do something
t.print("end main()"); return 0;
}
第一段代码:
这里有两个概念需要了解 —— 类 和 类的对象。Trace是一个类, t 是 Trace 类的对象。
类的成员包括 数据 和 方法。
方法属于类,数据属于类对象。—— 理解它。在你的脑海里有具体的图像。你要知道这句话在说什么。
举例说:
Trace 类 可以创建无数个对象,每个对象的方法都是类的方法,方法的入口(函数地址)是类的,不会因为对象不同而不同。
Trace 类 可以创建无数个对象,每个对象的数据都是对象的数据,每个对象的数据的存储空间和其他的对象的数据的存储空间不一样。
class Trace{
public:
Trace() { noisy = 0; }
void print(const char* s) { if(noisy) printf("%s\n", s); }
void on() { noisy = 1; }
void off() { noisy = 0; }
private:
int noisy;
};
第二段代码:
Trace t1; t1.noisy = 0;
Trace t2; t2.noisy = 1;
创建了两个Trace类对象, t1 和 t2。
有了类的对象,数据才具体,数据是属于对象的。换句话说对象就是因为被赋予了数据,才从类这个抽象的概念中脱离出来,成了具体的存在。
当类的对象被创建时,同时就有了this指针(这是个非常关键的隐藏属性)。this指针在计算机里的实现方式是对象数据的起始地址。
因为对象数据的存储地址独一无二,所以每个对象的this指针也是独一无二的。
t1.print("Hello");
t2.print("Hello");
其实print方法有两个参数。
void print(const char* s) { printf("%s\n", s); } 相当于 void print(Trace * const this,const char* s) { printf("%s\n", s); }
const 在 * 右边表示 指针地址(this)是常量,const在 * 左边表示 指针(s)指向的内容是常量。
第三段代码:
修改Trace类,可以任意指定输出文件,而且不影响之前写的程序的正常工作。
C++ 类的特殊方式的使用可以让改进程序变得轻而易举。
C++沉思录笔记 —— 序幕的更多相关文章
- 【C++沉思录】句柄2
1.[C++沉思录]句柄1 存在问题: 句柄为了绑定到Point的对象上,必须定义一个辅助类UPoint,如果要求句柄绑定到Point的子类上,那就存在问题了.2.有没有更简单的办法呢? 句柄使用Po ...
- 【C++沉思录】句柄1
1.在[C++沉思录]代理类中,使用了代理类,存在问题: a.代理复制,每次创建一个副本,这个开销有可能很大 b.有些对象不能轻易创建副本,比如文件2.怎么解决这个问题? 使用引用计数句柄,对动态资源 ...
- 生活沉思录 via 哲理小故事(四)
1.围墙里的墓碑 第一次世界大战期间,驻守意大利某小镇的年轻军官结识了镇上的牧师.虽然军官信仰信教,而牧师是天主教牧师,但两人一见如故. 军官在一次执行任务中身负重伤,弥留之际嘱托牧师无论如何要把自己 ...
- 生活沉思录 via 哲理小故事
本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...
- 生活沉思录 via 哲理小故事(一)
1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何 ...
- Atitit。 沉思录 与it软件开发管理中的总结 读后感
Atitit. 沉思录 与it软件开发管理中的总结 读后感 1. <沉思录>,古罗马唯一一位哲学家皇帝马可·奥勒留所著 2 2. 沉思录与it软件开发管理中的总结 2 2.1. 要有自己的 ...
- c++沉思录 学习笔记 第五章 代理类
Vehicle 一个车辆的虚基类 class Vehicle {public: virtual double weight()const = 0; virtual void start() = 0; ...
- c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)
一个简单的point坐标类 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y){} in ...
- c++学习书籍推荐《C++沉思录》下载
百度云及其他网盘下载地址:点我 编辑推荐 经典C++图书,应广大读者的强烈要求再版 目录 第0章 序幕第一篇 动机第1章 为什么我用C++第2章 为什么用C++工作第3章 生活在现实世界中 第二篇 类 ...
随机推荐
- 【linux】【jdk】jdk8.0安装
系统环境:Centos7 一.下载jdk8.0 jdk官方网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...
- Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09
目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...
- 【django】form
form 组件组要功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 1.创建Form类时,主要涉及到 [字段] 和 [插件],字段用于 ...
- Maven 梳理 -目录结构
Maven项目的目录约定 MavenProjectRoot(项目根目录) |----src | |----main | | |----java ——存放项目的.java文件 | | |----reso ...
- 每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM
# 由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题.除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是 ...
- go语言标准库之http/template
html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/templa ...
- [LeetCode] 824. Goat Latin
Description A sentence S is given, composed of words separated by spaces. Each word consists of lowe ...
- Scala 学习笔记之集合(1)
package com.citi.scala object CollectionDemo { def main(args: Array[String]): Unit = { /** * List */ ...
- MySQL 复制已存在的表生成新表
从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...
- Golang的反射reflect深入理解和示例
编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...