C++入门到精通 ——第二章 类

二、类

Author: XFFer_

文章目录

01 成员函数、对象拷贝、私有成员

1 综述
2 类基础
3 成员函数
4 对象的拷贝
5 私有成员

成员函数
//Time.h
class Time {
   
	int hour;
	int minute;
	int second;
	void InitTime (int tmphour, int tmpminute, int tmpsecond);
};
//Time.cpp
#include "Time.h"
void Time::InitTime (int tmphour, int tmpminute, int tmpsecond)
{
   
	hour = tmphour;
	minute = tmpminute;
	second = tmpsecond;	//类内部定义成员函数可以之间引用成员变量
}
对象的拷贝
Time time_one;
Time time_two = time_one;
Time time_three (time_two);
Time time_four {
    time_three };

默认情况下,这种类对象的拷贝,是每个成员变量逐个拷贝。如果在类中定义适当的“赋值运算符”就能够控制对象的这种拷贝行为。

02 构造函数详解,explicit,初始化列表

1 构造函数
2 多个构造函数
3 函数默认参数
4 隐式转换和explicit
5 构造函数初始化列表

构造函数

在类中,有一种特殊的成员函数,它的名字和类名相同,我们在创建类的对象时,这个特殊的成员函数就会被系统自动调用。这个成员函数,就叫“构造函数”;因为构造函数会被系统自动调用,所以我们可以简单的理解成:构造函数的目的就是初始化类对象的数据成员。

//Time.h
class Time {
   
public:
	int Hour;
	int Minute;
	int Second;
	Time (int tmphour, int tmpminute, int tmpsecond);
};
//Time.cpp
Time::Time (int tmphour, int tmpminute, int tmpsecond)
{
   
	Hour = tmphour;
	Minute = tmpminute;
	Second = tmpsecond;
}
  • 构造函数没有返回值
  • 不可以手工调用构造函数
  • 正常情况下,构造函数应该被声明为public
  • 构造函数中如果有多个参数,则我们创建对象的时候也要带上这些参数
//定义一个类对象
Time mytime = Time(3, 29, 23);
Time mytime(3, 29, 23);
Time mytime{
   3, 29, 23);
Time mytime = Time{
   3, 29, 23};
多个构造函数

提供多种初始化方法,但是参数表类型或者个数要有明显不同。
通过对象拷贝得到的新对象并没有调用传统意义上的构造函数而是调用了拷贝构造函数。

函数默认参数
  • 函数的默认值只能放在函数声明中,除非该函数没有函数声明
  • 在具有多个参数的函数中指定默认值时,默认参数都必须出现在不默认参数的右边
  • 一旦某个参数指定了默认值,它右边的所有参数都必须制定默认值
隐式转换和explicit

在构造函数声明前添加explicit可以强制性要求构造函数不能做隐式类型转换,只能用于初始化和显式类型转换。

构造函数初始化列表

定义构造函数时

Time::Time (int tmphour, int tmpminute, int tmpsecond)
	:Hour(tmphour), Minute(tmpminute), Second(tmpsecond)
{
   
	...;
}

03 inline、const、mutable、this、static

1 在类定义中实现成员函数inline
2 成员函数末尾的const
3 mutable
4 返回自身对象的引用,this
5 static成员

在类定义中实现成员函数inline

直接在.h头文件中类的定义中实现的成员函数,会被当作inline内联函数来处理。

成员函数末尾的const“常量成员函数”

在成员函数后增加一个const。不但要在成员函数声明中增加const,在函数定义时也要增加const。
作用:这个成员函数不会修改该对象里任何成员变量的值。

void classname::funcname (int valuelist) const;

结论:const成员函数,不管是const对象和非const对象都可以调用常量成员函数;而普通成员函数,不能用const对象调用。

mutable

不稳定,易改变的意思。为了图片const的限制

mutable修饰一个成员变量,一个成员变量一旦被mutable修饰了,就表示这个成员变量永远处于可以被修改状态。即便是在const结尾的成员函数中,也可以修改。

返回自身对象引用this

快捷键
ctrl + F3 + fn 查找文件中重名项

//Time.h
class Time {
   
	int Hour;
	Time& add_hour (int tmphour);
};
//Time.cpp
Time& Time::add_hour (int tmphour)	//返回值是对象本身
{
   
	Hour += tmphour;	//this->Hour += tmphour;
	return *this;	//this就是指向对象本身的指针,*this就是对象本身
}
//project.cpp
#include "Time.h"
int main()
{
   
	Time mytime;
	mytime.add_hour(3);
}

在调用成员函数时,编译器负责把这个对象的地址(&mytime)传递给成员函数中一个隐藏的this形参。在系统角度看来,任何对类成员的直接访问都被看做是通过this做隐式调用的。

  1. this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针
  2. 在普通成员函数中,this是一个指向非const类型的const指针(Time* const this)指向不能变,值可以改变
  3. 在const成员函数中,this是一个指向const类型的const指针(const Time* const this)指向和值都不可以改变
static成员

属于整个类的成员变量,这种成员变量叫static成员变量(静态成员变量),同样也有静态成员函数。静态成员函数只能操作静态成员变量。
特点:不属于某个对象,属于整个类,一旦在某个对象中修改了这个成员变量的值,在其他对象中也会随之改变。
调用时类名::成员变量名``类名::成员函数名

//Time.h
class Time {
   
	static int date;	//还没有分配内存,不能初始化
};
//Time.cpp
int Time::date;	//分配内存,不给初值默认为0,定义时不需要加static

04 类内初始化、默认构造函数、 =default

1 类相关非成员函数
2 类内初始化
3 const成员变量的初始化
4 默认构造函数
5 =default; ,=delete;

const成员变量的初始化

常量属性变量,需要在构造函数定义时使用初始化成员列表给出常量值。

默认构造函数

没有参数的构造函数称为默认构造函数。当没有构造函数时,进行“默认初始化”,编译器会生成一个“合成默认构造函数”。
使用多个构造函数时,一旦定义了一个构造函数系统就不会生成“默认构造函数”。

=default;=delete;

C++11引入

class Time {
   
public:
	Time() = default;	//编译器能够自动生成函数体(只能用于特殊的函数)
	Time() = delete;	//禁用某个函数
};

05 拷贝构造函数

如果一个类的构造函数的第一个参数是所属的类类型的引用。如果还有其他额外参数,那么这些额外的参数还都有默认值,则这个构造函数叫做拷贝构造函数

class Time {
   
public:
	Time (const Time& tmptime, int tmpvalue = 0);
};
Time::Time(const Time& tmptime
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 本章主要针对初学者,简要介绍了c/c++的基本语法和常见的编译错误。首先,介绍了程序的基本结构和常用的数据型。c语言的基本语句包括赋值语句、条件语句和循环语句等,这些语句都可以组成程序的逻辑结构。接下来,介绍了函数的定义和调用,以及参数传递的方式。对于c++,还介绍了一些面向对象的概念,例如、对象、成员函数等。同时,也提到了头文件和命名空间的使用方法。 在编程过程中,常常会出现各种编译错误,例如语法错误、型不匹配、语义错误等,需要学会如何查看和解决这些错误。此外,还介绍了调试工具和各种常用的运算符和表达式,这些都是初学者必须掌握的基础知识。 总的来说,本章是关于c/c++快速入门的一篇简介性文章。虽然只是涉及到了基础的语法和知识点,但对于初学者而言是一个很好的起点。在学习过程中需要不断实践,积累经验,并不断深入了解更高级的编程技术和工具。 ### 回答2: C/C++是一种广泛使用的编程语言,它具有高效、灵活、可移植等特点,在各个领域得到广泛应用。C语言是C++语言的基础,在学习C++之前,需要先掌握C语言的基础知识。 本文介绍的是C/C++教程中的第二章——快速入门C/C++。在这一章节中,我们将介绍C语言的基本语法、变量、运算符和流程控制语句等基础知识。以下是C语言的一些基本知识点。 C语言的基本语法: C语言程序由多个函数组成,其中一个函数必须命名为main(),程序从该函数开始执行。C程序中的语句以分号结束,注释使用“//”表示单行注释,“/* */”表示多行注释。 变量和数据型: C语言中变量的定义格式为“数据型 变量名”;数据型包括基本型和用户自定义型。C语言中的基本型有int型、char型、float型和double型等。其中,int型表示整型,char型表示字符型,float型和double型表示浮点型。 运算符: C语言中的运算符包括算术运算符、关系运算符、逻辑运算符等。例如,“+”表示加法运算符,“>=”表示大于等于运算符,“&&”表示逻辑与运算符。 流程控制语句: C语言中的流程控制语句包括if语句、switch语句、while语句、do-while语句和for语句等。这些语句可以根据条件执行相应的语句块。 总之,本章节的快速入门C/C++,具有基本语法、变量、运算符和流程控制语句等基础知识。初学者可以通过这些基础知识,轻松入门C/C++,为后续学习打下基础。同时,要注意编写代码的规范和逻辑性,才能更好的理解和使用C/C++语言。 ### 回答3: C语言是一门广泛使用的编程语言,具有高效、灵活、稳定等特点,被广泛应用于嵌入式系统、操作系统、驱动程序、多媒体应用等领域。学习C语言是程序员的必备技能之一。 第二章的快速入门C/C++教程,主要介绍了C/C++语言的基础知识,重点是程序的结构和输入输出。其中程序结构包括函数、语句、变量、表达式等,而输入输出则包括scanf、printf、getchar和putchar等函数。 # 程序结构 程序结构是指程序的基本构成单元,包括函数、语句、变量、表达式等。C语言中的程序结构主要包含以下几个方面。 ## 函数 C语言中,函数是程序的基本组成单元。一个C程序可以由一个或多个函数组成,每个函数可以完成一个任务。函数的格式如下: ```c 返回型 函数名(参数1, 参数2, ...){ // 函数体 return 返回值; } ``` 其中,返回型指函数执行后的返回值型;函数名是由程序员定义的,用于调用函数时识别函数;参数列表是函数的输入参数,可以有多个参数,每个参数由型和变量名组成;函数体是函数要执行的代码块;return语句可以返回函数的执行结果。 ## 语句 语句是完成特定功能的一组指令。C语言中的语句包括赋值语句、条件语句、循环语句等。C语言中通常使用花括号来表示语句块。例如,下面是一个if语句的例子。 ```c if(条件){ // if语句块 }else{ // else语句块 } ``` 如果条件为真,则执行if语句块中的代码;否则执行else语句块中的代码。 ## 变量 变量是用于存储数据的一种容器。在C语言中,一个变量包括变量名、型和值。变量名由程序员定义,用于识别变量;型指变量的数据型,如整型、字符型、实型等;值是存储在变量中的数据。变量的定义格式如下。 ```c 数据型 变量名 = 值; ``` 例如,下面是一个整型变量的定义。 ```c int num = 10; ``` ## 表达式 表达式是由变量、运算符和常量组成的一个具有返回值的语句。C语言中的运算符分为算术运算符、关系运算符、逻辑运算符等,例如加号、减号、乘号、除号等。下面是一个简单的表达式。 ```c a = 5 + 6 * 3 / 2 - 1; ``` 这个表达式将计算5加6乘3除以2减1的值,并将结果赋给a变量。 # 输入输出 输入输出是程序中非常重要的部分,可以让程序与用户进行交互。C语言中有多种输入输出函数,其中一些最常用的是scanf、printf、getchar和putchar函数。 ## scanf函数 scanf函数用于从标准输入读取格式化数据,并将读取的数据存储到变量中。它的格式如下。 ```c scanf("格式控制字符串", 变量列表); ``` 其中,格式控制字符串指示scanf函数需要读取的数据型和格式,变量列表指向要读取的变量。下面是一个scanf函数的例子。 ```c int num; scanf("%d", &num); ``` 这个代码段将从标准输入读取一个整数,并将其存储到num变量中。 ## printf函数 printf函数用于将格式化数据输出到标准输出。它的格式如下。 ```c printf("格式控制字符串", 参数列表); ``` 其中,格式控制字符串指示printf函数需要输出的数据型和格式,参数列表包含要输出的变量和常量。下面是一个printf函数的例子。 ```c int num = 5; printf("num的值是%d\n", num); ``` 这个代码段将输出“num的值是5”。 ## getchar和putchar函数 getchar函数用于从标准输入读取一个字符,putchar函数用于将一个字符输出到标准输出。它们的用法非常简单,例如下面的代码将读取一个字符并将其转换成大写字母后输出。 ```c char c = getchar(); putchar(toupper(c)); ``` 以上就是第二章中的快速入门C/C++教程的主要内容,包括程序结构和输入输出方面的基础知识。熟练掌握这些内容,对于学习C语言来说是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值