首页 > 编程语言 >C++学习笔记

C++学习笔记

时间:2022-09-20 16:35:03浏览次数:62  
标签:变量 对象 成员 定义 笔记 学习 C++ 函数

什么是对象?

1、Object = Entity ///对象是东西

2、Object is variable in programming language. ///对象即变量

3、Object = Attributes + Services

Data : the properties or status

Operations: the functions

Object.png

4、An object has a interface ///一个对象有一个接口

​ 接口是一种接受信息的方式,他被定义在对象所属的类中。

​ 接口可以用于交互,他可以保护对象不受破坏。 实现高内聚低耦合。

什么是面向对象?

1、A way to organize ///面向对象是一种方法去组织设计和实现

Designs ///找出思路的过程,与所使用的的语言无关

Implementations ///把代码写出来的过程

2、Object, not control or data flow, are the primary focus of design and implementation.

3、To focus on things, not operations. ///面向对象集中在事情上而不是操作上。

对象 vs 类

1、Objects (cat)

Represent things, events, or concepts

Respond to messages at run-time

1、Class (cat class) ///Class可以理解为把相似的东西归并为一类,叫做类。例如,狸猫和白猫是猫类

Define properties of instances /// 类中可以定义猫的属性。

Act like types in C++ ///在C++类就是类型。

微信截图_20220918150626.png

面向对象语言的特点

1、Everything is an Object. ///所有东西都是对象。

2、A program is a bunch of objects telling each other what to do by sending messages.///程序由一系列对象相互交互完成任务。

3、Each object has its own memory made up of other objects. ///每个对象有它自己独占的内存空间,且在此空间内可以存放任何对象。

4、Every object has a type. ///每个对象有一个类型。

5、All objects of a particular type can receive the same messages. ///同一类的所有的对象都能接受相同的消息,这一特征成为对象的可替代性,是oop的重要特征之一。

 

类的定义

1、在C++中,一个类的定义将在.h进行声明和.cpp中进行定义。

2、类的声明和原型在头文件中(.h)。

3、全部的函数体在源文件中(.cpp)。

头文件

1、头文件如同你和你的代码使用者之间的一个合同。

2、在任何使用该类的地方,都必须包含该头文件(#include "该.h")。

image-20220918164219034
声明 vs 定义

1、一个.cpp文件就是一个编译单元

2、只有声明可以在.h中,例如:全局变量,函数原型,类和结构体原型。

成员变量

image-20220918174634067

​ 图中amountToRefund是该函数的局部变量,balance是类TicketMachine的成员变量。

​ 在一个函数中,当成员变量的命名与局部变量的命名相同时,局部变量会起作用,成员变量将会被屏蔽。

1、成员变量是定义在类中。

2、成员变量的生命周期与其相应的对象一样长。

3、成员变量的使用具有类的范围,可以在类所定义的任何构造函数和方法中使用。本地变量只能在定义它的函数中使用。

#include <iostream>
using namespace std;

class A {
		int i;//这是一个成员变量
	public:
		A(): i(10) {
			cout << "A::A(),i=" << i << endl;
		}//A的构造函数
		void f() {
			i++;
			cout << "i++ = " << i << endl;
		}
};

int main() {
	A a;//定义对象a
	a.f();//通过a的method使用成员变量i;

	int x = 0; //定义局部变量x
	cout << "x = " << x << endl;
    
    return 0;
}

上述代码运行结果如下,成员变量i可以在对象的所有构造函数和方法中使用,而本地变量x只能在main中使用。

请注意,类是虚的,类并不拥有成员变量,成员变量是对象的。

image-20220920151503813

this 指针

在上述例子中,可以看到对象a可以类A中声明的f()函数,那么为什么a可以调用这个函数呢?

这是因为对象a与f()之间存在一种联系,该联系是用this指针建立的,this(是一种C++的关键字)指针是一种成员函数的隐藏变量,即 the hidden parameter。 /// void Point::print()可以被认为是void Point::print(Point *p)

#include <iostream>
#include <stdio.h>
using namespace std;

class A {
		int i;
	public:

		void f() {
			printf("  &i = %p\n", &i);
			printf("this = %p", this);
		}
};

int main() {
	A a;
    printf("  &a = %p\n", &a);
	a.f();
}

image-20220920161557795

从图中可以看到,对象a,a.i,this的地址都是一样。

因此,在使用a.print()的时候,可以看做是Point::print(&a)

在成员函数内部,您可以使用 this 作为指向调用该函数的变量的指针。

this 是所有类成员函数的自然局部变量,您可以不定义但可以直接使用它。

标签:变量,对象,成员,定义,笔记,学习,C++,函数
From: https://www.cnblogs.com/zzzwj/p/16711523.html

相关文章

  • 【学习随笔】2022.9.20 Ceres
    代码来源为SLAM14讲ch6 1#include<iostream>2#include<opencv2/core/core.hpp>3#include<ceres/ceres.h>4#include<chrono>56usingnamespace......
  • DropoutNet: Addressing Cold Start in Recommender Systems阅读笔记
    动机本文是2017年nips上的一篇论文。在当时对于冷启动问题,大部分工作是针对colditem的,或是将偏好和内容都结合在目标函数中使其非常复杂。本文作者提出了DropoutNet,这个......
  • SpringMVC学习笔记(四)
    拦截器拦截器需要实现HandlerInterceptor接口然后配置到IOC文件中在mvc:interceptors标签中配置拦截器bean或ref这种方式会拦截所有路径在mvc:interceptors标签中配置......
  • 《Spatial-Spectral T ransformer for Hyperspectral Image Classification》论文笔记
    论文题目《Spatial-SpectralTransformerforHyperspectralImageClassification》 论文作者:XinHe1,YushiChen1,*andZhouhanLin2论文发表年份:2021模型简......
  • 分布式锁的学习
    对forupdate的认识:forupdate是对数据库加锁的语句,并且是加悲观锁,可能是表锁也可能是行锁,根据你的查询语句进行判断,如果selectforupdata*fromtablewhereid=1,id......
  • CSAPP(读书笔记)
    一 计算机系统漫游1.1信息就是位+上下文C语言源程序是以字节序列的方式存储在文件中的,每个字节对应一个ASCⅡ编码,例如第一个字节整数值位35,对应字符'#'一个......
  • Markdown学习下载及使用
    Markdown学习及使用一、标题标题写法为:#号加对应的标题,多级标题对应多个#二、字体1、前后加一个*号为斜体Hellowword2、前后加两个*号为加粗Hellowword3、......
  • 快速学习JasperReport-数据填充
    1数据填充我们介绍了如何使用JasperReport来生成简单的文本报表,正式企业开发中动态数据展示也是报表中最重要的一环,接下来我们共同研究的就是填充动态数据到PDF报表中。......
  • 机器学习——聚类(K-Means)
    机器学习——聚类(K-Means)那是什么无监督学习——聚类聚类是基于相似对象将一组对象分组为类/类别的过程。聚类是一部分无监督学习.这种方法通常用于确定业务决策,特......
  • python机器学习(第一章 Python机器学习基础)
    第一章Python机器学习基础基础:Python官网:https://www.python.org/doc/;历史版本下载与维护信息:https://www.python.org/downloads/Anaconda官网:https://www.anacond......