IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 构造函数与对象指针 -> 正文阅读

[C++知识库]C++ 构造函数与对象指针

一、对类对象进行初始化,不能在声明中进行,要使用构造函数。

构造函数:

函数名与类名相同

也可以和其他函数一样在类外定义,没有返回值(但也不用void修饰)

构造函数不能被调用

构造函数是定义对象的时候调用的,只执行一次

构造函数有以下几种:

1、不含参:初值自己定义好

#include<iostream>
using namespace std;
class Time{  //声明Time类 
	public:
		Time(){  //不含参的构造函数,也可以在类外定义 
			hour = 0;
			minute = 0;
			sec = 0;
		}
		void set_time();   //用于赋值,覆盖初值
		void show_time();  //输出值
	private:
	    int hour;
		int minute;
		int sec; 
};
void Time::set_time(){  //类外定义函数 
	cin>>hour;
	cin>>minute;
	cin>>sec;
}
void Time::show_time(){
	cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main(){
	Time t1;  //建立一个对象,调用函数
	t1.set_time();
	t1.show_time();
	Time t2;
	t2.show_time();  //t2只调用输出函数,输出的即为初值 
	return 0; 
} 

2、含参:初值由用户输入,可以进行对不同对象的初始化

#include<iostream>
using namespace std;
class Box{
	public:
		Box(int,int,int);  //声明带参数的构造函数,并在类外定义 
		 int volume();   //函数声明,用于计算体积
    private:
	    int height;
		int width;
		int length; 
};
Box::Box(int h,int w,int l){  //参数具体值由对象传入,没有返回值 
	height = h;
	width = w;
	length = l;
}
int Box::volume(){
	return (height*width*length);
}
int main(){
	Box box(12,25,30);   //定义对象并传入初始值
	cout<<"volume is "<<box.volume()<<endl; 
}

上面这种构造函数也可以写成一下这种参数初始化表

Box::Box(int h,int w,int l):height(h),width(w),length(l){}
//后面花括号可以是空的,代表,没有赋值以外的语句要执行

构造函数的重载:

(1)一个类中只能有一个默认构造函数(程序中已设定了全部属性的初值),如果没有无参构造函数,并且用户没有定义构造函数,系统会自动提供一个默认构造函数,但是里面是空的,没有初值。

(2)重载不能在以下几种情况进行:

1、无参构造函数和全部参数指定初值的构造函数(若出现不输入实参的对象,二者作用重复)

2、全部是默认参数的构造函数和其他重载构造函数

比如:

Example(int = 0,int = 10,int = 4);   //这是一个全部为默认参数的构造函数
Example(int,int);    //这是一个有两个参数的构造函数
Example example1(1,0);

这时候会发现example1调用哪个构造函数都可以,会出现歧义

析构函数:

~构造函数

用处:撤销对象占用的内存之前完成清理工作,使清理好的这部分内存可以被程序分配给新对象使用

先构造的后析构,后构造的先析构。

二、对象数组

顾名思义,是由对象组成的数组

例:

Student stu[20];   //在已有Student类基础上,建立一个数组,里面有20个对象

可以像普通数组那样赋值,但只能是构造函数有一个参数时。如果构造函数有多个参数,可以用以下方法定义:

Student stu[3] = {  //定义有三个对象的对象数组
   Student(1,18,87);   //调用第一个元素的构造函数,并输入三个实参
   Student(2,19,76);   //第二个对象
   Studnet(3,18,72);   //第三个对象
};

三、对象指针

1、指向对象的指针:

类名 *对象指针名;? ?//定义指针

类名 对象名;? //定义一个对象

指针名 = &对象;? //将对象的地址赋给指针

注意:指针名指向的是对象的地址,而(*指针)指向的是对象本身。

因此想要用指针访问对象的公有成员,就需要如下步骤:

(*指针名).共有成员名;

指针名->共有成员名;? ? ? ? ?//调用函数是同样的两种方法

2、指向对象成员的指针

(1)指向数据成员的指针

数据类型名 *指针变量名;

指针名 = &对象.数据成员;? ? //当数据成员为公用

?(2)指向成员函数的指针

数据类型名(类名::*指针变量名)(参数表列);

指针变量名 = &类名::成员函数名;

?3、指向当前对象的this指针

this->数据成员

(*this)代指对象本身,上面这句话也可以变成? (*this).数据成员

四、共用数据的保护(const的使用)

1、常对象,该对象里所有数据成员的值都不能改变

类名 const 对象名【(实参表)】;

?常对象可以有常成员函数和普通成员函数,但外界调用只能调用常成员函数,而不能调用普通函数。

常成员函数可以访问常对象中的数据成员,但不能改变他的值

2、常数据成员

注意:只能通过构造函数的参数初始化表对常数据成员进行初始化

const 数据类型 数据名;

3、常成员函数

常成员函数可以引用类中的数据成员,但不能修改他们的值(不论是不是常数据)

类型名 函数名(参数表) const

4、指向对象的常指针

当指针被const修饰时即变为常指针时,常指针始终指向一个对象,不能改变指向

类名 *const 指针变量名 = &对象;

5、指向常对象的指针变量

const 类型名 *指针变量名;

注意:(1)常变量的指针只能是指向常变量的指针,不能是一般的指针变量

(2)指向常变量的指针可以指向不被声明为const的变量,只不过此时不能用此指针改变变量的值,但是变量本身想怎么变就怎么变,即为在指针访问它的期间,它具有常变量的特征,不被引用时就是普通的变量

6、常引用

常用于函数形参

我们知道函数形参和实参不是一个东西,他们使用了两个不同的存储单元

那么只要使用指针或者引用(也叫别名),形参实参处于同一地址中,在函数中对形参作出改变就能传到实参那里去

如果不想让实参对象的值发生变化,就会用到常引用

上面讲的常指针的主要用处也是作为函数的形参,理由同上

类型名 函数名(const 类名 &别名){ }

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:31:12  更:2022-05-01 15:31:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:43:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码