C++学习笔记——类与对象

1、类的定义

C语言是面向过程的语言,C++是面向对象的语言。面向过程,我目前的理解是解决问题的方法和实现。而面向对象是,去主要编写某个对象的情况。面向对象将方法和属性封装在一个类里面,从而更加容易操作。

因为C++兼容C语言,所以struct也可以是类的定义前缀。但是一般使用的是class。他们两个的区别是,struct默认是public的,而class默认是private的访问权限。

复制代码
class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

在一个类中的变量叫做类的属性或者类的成员变量,类中的函数叫做类的方法或者类的成员函数。

类的定义通常有两种:

1.声明和定义全部放在类中;

2.声明放在.h文件中,定义放在cpp文件中。在工作时,一般是第二种。

2、类的封装

我的理解是,我们写的一些解决问题的方法或者一些函数,成员变量不想要使用者看到,或者修改。我们就将这些方法函数封装起来,只提供一个调用的方法就行,内部的细节不用知道。

封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用 户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日 常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如 何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计 算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以 及键盘插孔等,让用户可以与计算机进行交互即可。

3、类的实例化

cpp 复制代码
class A{
public:
    void f1(){}

private:
    int _name;
    int _day;
};

int main()
{
    A a;


}

在A这个类中,上面的这些代码实际上都是声明,没有创建对象前,不占用空间。

当实例化后,就分配了空间。

当我们你需要算类对象的大小时,因为类里的成员函数是每一个对象都可以调用的,不需要自己再弄一份。因此,只用计算成员变量的大小,同时采用内存对齐原则。

注意:空类,系统会给一个字节来唯一标识这个类的对象

4、this指针

因为在创建了好几个类对象后,大家同时都调用类中的一个函数,调用进去后如何识别是谁来调用的,该返回给谁值。因此,C++编译器会在每一个类对象调用函数时,将this指针传递过去,这样谁调用就传递谁的this,保证正常运行。

C++编译器给每个"非静态的成员函数"增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有"成员变量" 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编 译器自动完成。

cpp 复制代码
// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
比特就业课
8.3. C语言和C++实现Stack的对比
1. C语言实现
public:
 void Print()
 {
 cout << "Print()" << endl;
 }
private:
 int _a;
};
int main()
{
 A* p = nullptr;
 p->Print();
 return 0;
}
// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
public:
    void PrintA()
   {
        cout<<_a<<endl;
   }
private:
 int _a;
};
int main()
{
    A* p = nullptr;
    p->PrintA();
    return 0;
}

这里有一个比较容易烧脑的问题;

相关推荐
一只机电自动化菜鸟42 分钟前
一建机电备考笔记(36) 焊接技术—焊接方法与工艺(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
乖硅不乖42 分钟前
Dummy七日学习(七)
学习
知识分享小能手43 分钟前
R语言入门学习教程,从入门到精通,R语言获取数据 (8)
开发语言·学习·r语言
June`44 分钟前
高并发内存池如何实现
c++·tcmalloc·内存池
ComputerInBook44 分钟前
C++ 关键字 constexpr 和 consteval 之注意事项
开发语言·c++·constexpr·consteval
sensen_kiss1 小时前
CAN302 Technologies for E-Commerce 电子商务技术 Pt.8 网络安全(Secure the Web)
网络·学习·安全·web安全
通信小呆呆1 小时前
注意力机制用于信号同步:从匹配滤波到可学习对齐
人工智能·学习·机器学习·信息与通信
米啦啦.1 小时前
STL(标准模板库)
开发语言·c++·stl
咩咦1 小时前
C++学习笔记08:指针和引用的区别
c++·学习笔记·指针·引用·指针和引用
小袁说公考1 小时前
公考培训机构2025年度测评:财务健康度与用户体验重构排名格局
大数据·人工智能·经验分享·笔记·其他·重构·ux