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 是所有类成员函数的自然局部变量,您可以不定义但可以直接使用它。

posted @   _Zzzwj  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示