当前位置: 首页 > article >正文

《C++ Primer Plus》学习笔记|第10章 对象和类 (24-12-2更新)

文章目录

  • 10.3 类的构造函数和析构函数
    • 10.3.2 使用构造函数
      • 显式地调用构造函数
      • 隐式地调用构造函数
      • 使用对象指针
    • 10.3.3默认构造函数
    • 10.3.4 析构函数
      • 析构函数示例
  • 10.4 this指针
      • 三个const的作用
  • 10.5 对象数组
  • 10.6 类作用域
  • 10.9 复习题
      • 1.什么是类?
      • 2.类如何实现抽象、封装和数据隐藏?
      • 3.对象和类之间的关系是什么?
      • 4.除了是函数之外,类函数成员与类数据成员之间的区别是什么?
      • 6.类构造函数在何时被调用?类析构函数呢?
      • 8.什么是默认构造函数,拥有默认构造函数有何好处?
      • 10.this和\*this是什么?

10.3 类的构造函数和析构函数

C++提供了一个特殊的成员函数——类构造函数,专门用于构造新对象、将值赋给它们的数据成员。

10.3.2 使用构造函数

有两种构造函数:显式地和隐式地

显式地调用构造函数

Stock food = Stock("World Cabbage",250,1.25);

隐式地调用构造函数

Stock food("World Cabbage",250,1.25);

另外可以使用对象指针进行管理

使用对象指针

Stock *pstock = new Stock("Electroshock Gmes", 18,19.0);

对象没有名称,使用对象指针来管理该对象

10.3.3默认构造函数

如果没有提供任何构造函数,则C++将自动提供默认构造函数。

Stock fluffy_the_cat;

创建对象,但不初始化器成员

1、如果自己定义了构造函数:则不应该使用默认的构造函数。
2、如果自己没有定义构造函数:则使用默认的构造函数。

如果如果提供了非默认构造函数(如Stock(const char * co, int n, double pr)),但没有提供默认构造函数,则下面的声明将出错

Stock stock1;

下面是为Stock类定义的一个默认构造函数:

Stock::Stock(){  //default constructor
	company = "no name";
	shares =0;
	share val =0.0;
	total val =0.0;
}

10.3.4 析构函数

  • Stock类的析构函数为~Stock( )。
  • 和构造函数一样,析构函数 也可以没有返回值和声明类型。
  • 与构造函数不同的是,析构函数没有参数,

析构函数示例

Stock::~Stock(){  //class destructor
	cout << Bye,"<< company << "!\n";
}

10.4 this指针

在 C++ 中,this指针是一个隐含在类的非静态成员函数中的指针。它指向调用该成员函数的对象本身。
当创建一个类的多个对象时,每个对象都有自己的数据成员,但成员函数只有一份代码。this指针帮助区分是哪个对象在调用成员函数,并可以在成员函数中访问对象的数据成员和其他成员函数。

class Person {
private:
    std::string name;
    int age;
public:
    void setName(std::string newName) {
        this->name = newName;
    }
    void setAge(int newAge) {
        this->age = newAge;
    }
};

三个const的作用

const Stock &topval(const Stock &s)const;

函数返回值前的const防止返回值被修改
函数参数中的const防止函数内部意外修改传入参数
函数声明末尾的const防止函数修改调用它的对象

10.5 对象数组

声明对象数组的方法与 声明标准类型数组相同:

Stock mystuff[4];

可以用构造函数来初始化数组元素:

const int STKS=4;
Stock stocks[STKS]={
	Stock("NanoSmart",12.5,20),
	Stock("Boffo objects",200,2.0),
	Stock("Monolithic Obelisks",130,3.25),
	Stock("Fleep Enterprises",60,6.5)
};

如果类包含多个构造函数,则可以对不同的元素使用不同的构造函数:

const int STKS=10;
Stock stocks[STKS]={
	Stock("NanoSmart",12.5,20),
	Stock(),
	Stock("Monolithic obelisks",130,3.25)
};

由于该声明只初始化了数组的部分元素,因此余下的7个元素将使用默认构造函数进行初始化。

10.6 类作用域

在类中定义的名称(如类数据成员名和类成员函数名)的作用域都为整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。这样的作用域被称为类作用域。

使用对象指针的方式访问该对象的成员函数:

class Ik
{
...
	void ViewIK();
...
}
int main(){
Ik *pik = new Ik;
pik->ViewIk();
}

10.9 复习题

1.什么是类?

类是用户定义的类型的定义。类声明指定了数据将如何存储,同时提供了访问和操作这些数据的方法。

2.类如何实现抽象、封装和数据隐藏?

用户可以根据类的公有接口对类对象执行的操作,这是抽象。类的数据成员可以是私有的(默认值),这意味着只能通过类成员函数来对数据进行访问,这是数据隐藏。实现的具体细节(如数据的表示和方法的代码)都是隐藏的,这是封装。

3.对象和类之间的关系是什么?

类定义了一种类型,包括如何使用它。对象是一个变量或其他的数据对象(如new生成的),并根据类定义被创建和使用。类和对象之间的关系同标准类型与其变量之间的关系。

4.除了是函数之外,类函数成员与类数据成员之间的区别是什么?

如果创建给定类的多个对象,则每个对象都有其自己的数据内存空间;但所有的对象都使用同一组成员函数(通常,这个方法是公有的,而数据是私有的,但这只是策略方面的问题,而不是对类的要求)

6.类构造函数在何时被调用?类析构函数呢?

在创建类对象或显示调用构造函数时,类的构造函数被调用。当函数过期时,析构函数被调用。

8.什么是默认构造函数,拥有默认构造函数有何好处?

默认构造函数是没有参数或所有参数都有默认值的构造函数。拥有默认构造函数后,可以声明对象,而不初始化它,即使已经定义了初始化构造函数。它还使得能够声明数组。

10.this和*this是什么?

this指针是类方法可以使用的指针,它指向用于调用方法的对象。因此,this是对象的地址,*this是对象本身。


http://www.kler.cn/a/419670.html

相关文章:

  • NLP 的研究任务
  • 「Mac畅玩鸿蒙与硬件38」UI互动应用篇15 - 猜数字增强版
  • Python实现网站资源批量下载【可转成exe程序运行】
  • MySQL 函数创建中的 Err 1418:原因解析与解决指南20241203
  • 威联通-001 手机相册备份
  • Jmeter进阶篇(28)结合AI做性能测试:开启性能测试自动化新篇章
  • 【学习笔记】GoFrame框架
  • DepthAI 2.29版本 发布
  • CLIP-LoRA: Low-Rank Few-Shot Adaptation of Vision-Language Models
  • 密码学和CA证书
  • Elasticsearch优化汇总
  • phpmyadmin导出wordpress数据教程
  • 在 CentOS 上安装 Docker:构建容器化环境全攻略
  • 《Python基础》之正则表达式--re模块
  • 【QNX+Android虚拟化方案】124 - VLAN配置 之 QNXAndroid 修改简单记录
  • java原生反序列化利用链7u21的学习
  • CCNA_SEC 第五天作业
  • 一款适用于教育行业的免费word插件
  • Stable Diffusion介绍
  • ARM 嵌入式处理器内核与架构深度剖析:解锁底层技术逻辑
  • Java中Logger定义的三种方式
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 在anaconda中为jupyter安装Nbextensions扩展
  • C++初阶——动态内存管理
  • android studio引用so库
  • 【Linux】文件操作的艺术——从基础到精通