C++知识整理三

news/2024/5/18 23:25:45 标签: 自考, 构造函数, 析构函数, 对象初始化

前言

  本次总结接上次总结。看了自考成绩之后,总结的欲望更加的强烈了,用我的总结来应对选择和填空,我相信是小事一桩咯!

重点

  1.简单了解函数模板和类模板

template <class T>     //这里也可以使用 typename 来代替 class
T max(T m1, T m2)
{return(m1>m2)? m1:m2;}

  在调用函数模板时,模板的参数是由函数的参数推断出来的。注意第二行前是没有东西的。

template <class T>   //带参数T的模板说明,可用 typename 代替 class
class TAnyTemp {
		T x,y;      //类型为T的私有数据对象
	public:
		TAnyTemp(T X,T Y):x(X),y(Y) { }   //构造函数
		T getx() { return x;}            //内联成员函数,返回类型为T
		T gety() { return y;}

  2.类是具有唯一标识符的实体,在类中声明的任何成员不能使用extern、auto和register关键字进行修饰,类中定义的数据和函数称为这个类的成员(数据成员和成员函数),如果没有使用关键字,则所有成员默认声明为private权限。

  定义成员函数:

返回类型 类名::成员函数名(参数列表)
{
	成员函数的函数体    //内部实现
}

  不能再类体内给数据成员赋值,下面的方法是错误的:

Class Point {
	int x=25,y=56;
}

  3.成员函数和数据成员

类的成员函数可以直接使用自己类的私有成员(数据成员和成员函数)
类外面的函数不能直接访问类的私有成员(数据成员和成员函数)
类外面的函数只能通过类的对象使用该类的公有成员函数

  4.构造函数

  当没有为一个类定义任何构造函数的情况下,C++编译器总要自动建立一个不带参数的构造函数,一旦程序定义了自己的构造函数,系统将不再提供默认的构造函数。(默认也称缺省)

  构造函数的特征:

1.名称与类名一样;
2.不能指定返回类型,连void也不行
3.不能被继承

  构造函数和new:当使用new建立一个动态对象时,new首先分配足以保存Point类的一个对象所需要的内存,然后自动调用构造函数来初始化这块内存,再返回这个动态对象的地址。

  5.复制构造函数(拷贝构造函数

1.通常情况下,编译器有一个默认的复制构造函数
2.在使用该类的一个对象初始化该类的另一个对象时,调用这个函数
3.使用对象的引用作为形式参数

  6.析构函数

1.函数名称与类名一样(为与构造函数区分,在析构函数的前面加上一个“~”号)
2.不能指定返回类型,连void也不行
3.不能指定参数,但是可以显式的说明参数为void,例如A::~A(void)
4.一个类只能定义一个析构函数且不能指明参数
5.在对象的生存期结束时被自动调用
6.不能被继承

  析构函数和delete:当使用delete删除一个动态对象时,它首先为这个动态对象调用析构函数,然后再释放这个动态对象占用的内存。

  当用delete释放动态对象数组ptr时,使用delete [ ]ptr使运算符delete知道ptr指向的是动态对象数组,delete将为动态数组的每个对象调用一次析构函数,然后释放ptr指向的内存。

  7.默认析构函数

  如果定义类时没有定义析构函数,C++编译器会产生一个函数体为空的默认析构函数

  8.this指针

  使用this指针,保证了每个对象可以拥有自己的数据成员,但处理这些数据成员的代码可以被所有的对象共享。

  C++规定:当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针。

  9.对象成员的初始化
  在类A中说明对象成员的一般形式如下:

class A {
	类名1   成员名1;
	类名2   成员名2;

       类名n   成员名n;
}

  说明对象成员是在类名之后给出对象成员的名字。为初始化对象成员,A类的构造函数要调用这些对象成员所在类的构造函数,A类的构造函数的定义形式如下:

A::A(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数表n){ //其他操作 }

  “:”后由逗号隔开的项组成成员初始化列表,其中的参数表给出了为调用相应成员所在类的构造函数时应提供的参数,参数列表中的参数都来自“参数表0”。

  对象成员构造函数的调用顺序取决于这些对象成员在类中说明的顺序,与他们在成员初始化列表中给出的顺序无关。

  当建立A类的对象时,先调用对象成员的构造函数,初始化对象成员,然后才执行A类的构造函数,初始化A类中的其他成员。析构函数的调用顺序与构造函数正好相反。

总结

  这篇里面的大部分我们都简单接触过,但是这一篇是很重要的哦!尤其是最后一点,之后的总结还会涉及到的。


http://www.niftyadmin.cn/n/1659668.html

相关文章

HTML再接触

前言   之前学习C#视频的时候接触过HTML&#xff0c;现在经过牛腩的学习&#xff0c;再次专项学习HTML&#xff0c;还是有很多收获的&#xff0c;最主要的还是复习之前的HTML内容了&#xff0c;不过知识就是在重复中印象才越来越深刻的。 收获   1.开始标签 内容 结束标签…

C++知识整理四

前言 哈哈哈&#xff0c;小编又来了&#xff01; 重点 1.静态成员 如果类的数据成员或成员函数使用关键字static进行修饰&#xff0c;这样的成员称为静态数据成员或静态成员函数&#xff0c;统称为静态成员。 如果在类中仅对静态数据成员进行声明&#xff0c;则必须在文件作用…

大量背单词有用吗?

前言 从三年级开始接触英语&#xff0c;到今为止已经14年了&#xff0c;可是自己的英语水平虽不至于茫然无知&#xff0c;可是真正做到和老外进行交流&#xff0c;还是有一定的困难的。不仅是老外&#xff0c;和小伙伴进行topic的时候&#xff0c;也有卡壳的时候&#xff0c;类…

深入学习方法和属性

前言 我们之前都学习过&#xff1a;属性和方法&#xff0c;相信大家都知道他们的区别&#xff0c;那现在一起来跟着小编来走一下这些你可能不了解的知识点。 方法 给大家1分钟的思考时间&#xff0c;方法如何写。。。。。。 好了&#xff0c;不管大家有没有思考出来&#xff0…

ASP.NET了解一下

前言 之前学习C#的时候&#xff0c;就提到过.net可以干什么&#xff1f;其中.net可以开发Internet应用程序&#xff0c;叫做ASP.NET应用程序&#xff0c;那现在呢我们就来具体了解一下什么是ASP.NET吧。 ASP ASP&#xff08;经典ASP&#xff09;&#xff0c;是第一款服务器端脚…

EditPlus软件的使用

前言 在学习XML的时候&#xff0c;服务器里提供了一款软件&#xff1a;EditPlus&#xff0c;在之后学习JavaScript的时候&#xff0c;需要在文本文档里写代码&#xff08;我是这样写的&#xff0c;当然也可以使用vs&#xff09;&#xff0c;文本文档没有代码高亮显示的功能&…

博客的第一天

终于有了自己的博客啦&#xff0c; 未来的学习生活里&#xff0c;博客伴我成长&#xff0c;帮我见证学习生活中的点点滴滴...... 生命的意义在于&#xff1a;奋斗不止&#xff01; 爱拼才会赢&#xff01; 爱笑的女孩才最美&#xff0c; 乐观对待生活&#xff0c;生活必不…

【JS】基础篇之带你走进JavaScript的数据类型

前言 什么是JS呢&#xff1f;全称是JavaScript&#xff0c;是能够运行在JS解释器中的脚本语言。那知道了什么是JS&#xff0c;那你知道什么是ES吗&#xff1f;如果你了解JS的前世今生&#xff0c;你就知道什么是ES了&#xff0c;ES就是JS&#xff0c;相当于ES是大名&#xff0c…