c++ 复习 第四章类与对象
小知识点
成员函数参数的默认值要写在类中
类外就不要再写默认值了c++鼓励数据和操作封装在一起
对象之间的相互通信是通过( 调用成员函数 )实现的。
在类中,如果不作特别说明,所有的数据均为私有类型
三种访问限定符出现的次数为(任意多次)
构造函数先构造再执行体内函数
析构函数先执行体内函数再析构(析构顺序是变量创建的逆序,即类似于栈)构造函数不能定义返回值类型,也不能包括return语句
可以是内联函数,可以有形参也可以没有
可以重载自身类对象不能作为类的成员
默认构造函数
调用时可以不需要实参:
参数列表都为空或全部参数都有默认值
Clock();
Clock(int x=2,int y=1);
这两个是一样的都是默认构造函数
委托构造函数
使用类的其他构造函数进行初始化的过程
eg.
Clock::Clock(int x,int y):x(x),y(y){}
Clock::Clock():Clock(0,0){}
下面的就直接用了上面的构造函数
析构函数
完成对象被删除前的一些操作,因此是先执行函数体,然后才析构
在对象的生存期结束后自动调用
一个类中只能定义一个析构函数
~Point();
default和delete
Clock()=default;
指示编译器生成默认构造函数
Clock()=delete;
结构体
缺省参数为public
联合体
成员共用相同的内存单元
任何两个成员不会同时有效
枚举
不限定作用域的枚举类型:
enum 枚举类型名 {变量值列表}
enum week{Sun,Mon,Tue};
枚举元素按照常量处理,不能Sun=1
这样赋值
默认值从0开始
枚举型数据可以隐含转化为整形数据,但是整形数据不能直接赋值给枚举变量,需要强制类型转化
强类型枚举:
enum class 枚举类型名:底层类型{枚举值列表};
实验一
#include<iostream>using namespace std;class Clock{private:int a;public:Clock()=delete;Clock(int x=2){a=x;}//这个函数,如果写Clock m;就错了(因为Clock()=delete;)//这个必须给int x 传入参数void print(){cout<<a<<endl;}
};/*
这里主要是验证一下delete的用法
如果在类中写了Clock()=delete;
那么后面就不能写Clock m;因为这种无参数的默认构造函数已经被删除了
*/int main(){Clock m;//Clock m();//不能这么创建一个对象,只有在只有在传参的时候才这么写m.print();return 0;
}
类的组合实验
私以为不仅在调用函数时候需要调用复制构造函数,在初始化列表中也需要调用复制构造函数
/*
一个简单的组合类的程序
用于复习
*/#include<iostream>
#include<math.h>using namespace std;//Point类
class Point{public:Point(int xx=0,int yy=0);Point(Point &P);int getX(){return x;}int getY(){return y;}private:int x,y;}; Point::Point(int xx,int yy){cout<<"Point构造函数"<<endl; x=xx;y=yy;
}Point::Point(Point &P){x=P.x;y=P.y;cout<<"Point复制构造函数"<<endl;
}//Line类
class Line{public:Line(Point p1,Point p2);Line(Line &L);double getlen(){return len;} private:Point p1,p2;double len;};Line::Line(Point p1,Point p2):p1(p1),p2(p2){double x=static_cast<double>(p1.getX()-p2.getX());double y=static_cast<double>(p1.getY()-p2.getY());len=sqrt(x*x+y*y);cout<<"Line构造函数"<<endl;
}Line::Line(Line &L):p1(L.p1),p2(L.p2){cout<<"Line复制构造函数"<<endl;double x=static_cast<double>(p1.getX()-p2.getX());double y=static_cast<double>(p1.getY()-p2.getY());len=sqrt(x*x+y*y);
}int main(){Point myp1(1,1),myp2(4,5);Line line(myp1,myp2);cout<<endl;Line line2(line);cout<<line.getlen()<<endl;cout<<line2.getlen()<<endl; return 0;
}
改变枚举值的默认值实验
#include<iostream>using namespace std;enum x{a=7,b,c,d};
int main(){x x1=a;x x2=b;x x3=c;cout<<x1<<endl<<x2<<endl<<x3<<endl;return 0;
}
题目一
输出为?
#include<iostream>
using namespace std;
class ONE{int c;
public:ONE(): c(0){cout<<1;}ONE(int n): c (n){cout<<2;}
};
class TWO{ONE onel;ONE one2;
public:TWO(int m): one2(m){cout<<3;}
};
int main(){TWO t(4);return 0;
}
注意这个程序
TWO t(4)会先调用内嵌对象的构造函数,并不是说调用这个构造函数的one2(m)
然后就先构造一个one2类型的了
而是根据变量的定义顺序,先后定义ONE onel; ONE one2;
因此会先调用ONE(): c(0){cout<<1;}
然后调用ONE(int n): c (n){cout<<2;}
最终输出123
题目二:析构函数的执行顺序以及构造成员时候的顺序
#include <iostream>
using namespace std;
class B1 { int b1; public: B1(int i=0) { b1=i; } ~B1() { cout<<b1; }
};
class B2 {int b2; public: B2(int i) { b2=i; } ~B2() { cout<<b2; }
};
class B3 {int b3; public: B3(int i) { b3=i; } ~B3() { cout<<b3; }
};
class D{ int d; B2 b2;B3 b3;B1 b1; public: D(int i,int j,int k):b2(i),b3(j) { d=k; } ~D() { cout<<d; }
};
int main(){ D d(4,2,1); return 0;
}
输出1024
c++ 复习 第四章类与对象相关推荐
- 第四章类和对象 习题答案
一.选择题1.能提供封装的C++的下列关键字是(C)A.whileB. unionC. classD. for2.在下面所列项中,不是面向对象的特点的是(C)A. 多面性B. 抽象性和封装性C. 多线 ...
- C++语言程序设计——知识点复盘(第四章 类与对象)
目录 面向对象程序设计的基本特点 1.抽象 2.封装 3.继承 4.多态 类和对象 类的成员函数 1.成员函数的实现 2.目的对象. 3.带默认形参值的成员函数 4.内联成员函数 构造函数 析构函数 ...
- 第四章——类和对象(一)
c++面向对象的三大特性:封装.继承.多态 4.1封装 4.1.1封装的意义 封装的意义 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 封装意义一: 在设计类的时候,属性和行为 ...
- 操作系统考研复习——第四章(文件管理)
操作系统考研复习--第四章(文件管理) 4. 文件管理 4.1 文件管理基础 4.1.1 文件的概念 1. 数据项.记录和文件 2. 文件属性 3. 文件系统的接口 4. 文件的基本操作 5. 文件的 ...
- Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25
Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...
- 算法复习第四章动态规划
算法复习第四章动态规划 动态规划 TSP问题 0-1bag 动态规划 TSP问题 0-1bag 最长公共子序列不考:
- C++编程入门系列之十四(类与对象:构造函数和析构函数)
C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...
- Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- 第三章类与对象基础 ① 笔记
1. 内容回顾 1.1. 课前测试 1.2. 上节内容 2. 本章重点 2.1. 类和对象的概念 2.2. 类的基本组成 2.3. 构造方法 2.4. 成员方法 3. 具体内容 3.1. 类和对象的概 ...
最新文章
- PhoenixGo战胜绝艺,腾讯包揽AI围棋大赛前两名
- 最新消息!阿里四舍五入无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
- [渝粤教育] 西南科技大学 英语口语 在线考试复习资料
- linux命令详解(arm交叉编译器)
- Graham Scan凸包算法
- opencv︱图像的色彩空間cvtColor(HSV、HSL、HSB )及相关色彩学
- Qt5学习笔记之串口助手二:发送接收实现
- WPF 嵌入字体文件
- 工作中常用Linux命令总结一
- git几个救命的命令
- selenium安装和下载
- ncie全国计算机等级考试,国家信息化工程师认证考试(NCIE)
- ltsc教育许可激活_教育部征求有关开放许可要求的意见
- 滑动窗口(java)
- access里面的表达式运用_Access 如何使用表达式生成器
- 【C语言】简单的闰年计算
- leetcode 1723.完成所有工作的最短时间 - 二分+递归
- 如何搭建高质量、高效率的前端工程体系--页面结构继承
- 应用Python爬虫技术获取福彩历史数据
- layui totalRow 多层嵌套json_鹏华资产40亿产品兑付追踪:中招嵌套结构 或踩雷非标-基金频道...
热门文章
- 为专业电竞而生:努比亚红魔战地迷彩版空降ChinaJoy
- STM32 - CubeL4使用手册
- 运行CMD安装mysql系统报错_win10下mysql 8.0.15 winx64的安装与配置以及运行mysqld -initialize命令报错等问题解决...
- 即要会plc又要会c语言,PLC与单片机相比有什么优势?
- 一种针对滑动变阻器AD值采集线性化处理算法
- 深度解析JVM内存模型
- 【智能优化算法】基于免疫算法求解单目标优化问题附matlab代码
- 服务器网络信息有两个地址,实战案例:一台主机不能设置两个网关
- 阿里巴巴达摩院对话团队招聘研究实习生!
- 信息管理毕业设计 SSM的员工_学生宿舍后勤管理系统(源码+论文)