小知识点

  1. 成员函数参数的默认值要写在类中
    类外就不要再写默认值了

  2. c++鼓励数据和操作封装在一起

  3. 对象之间的相互通信是通过( 调用成员函数 )实现的。

  4. 在类中,如果不作特别说明,所有的数据均为私有类型

  5. 三种访问限定符出现的次数为(任意多次)

  6. 构造函数先构造再执行体内函数
    析构函数先执行体内函数再析构(析构顺序是变量创建的逆序,即类似于栈)

  7. 构造函数不能定义返回值类型,也不能包括return语句
    可以是内联函数,可以有形参也可以没有
    可以重载

  8. 自身类对象不能作为类的成员

默认构造函数

调用时可以不需要实参:
参数列表都为空或全部参数都有默认值
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. 第四章类和对象 习题答案

    一.选择题1.能提供封装的C++的下列关键字是(C)A.whileB. unionC. classD. for2.在下面所列项中,不是面向对象的特点的是(C)A. 多面性B. 抽象性和封装性C. 多线 ...

  2. C++语言程序设计——知识点复盘(第四章 类与对象)

    目录 面向对象程序设计的基本特点 1.抽象 2.封装 3.继承 4.多态 类和对象 类的成员函数 1.成员函数的实现 2.目的对象. 3.带默认形参值的成员函数 4.内联成员函数 构造函数 析构函数 ...

  3. 第四章——类和对象(一)

    c++面向对象的三大特性:封装.继承.多态 4.1封装 4.1.1封装的意义 封装的意义 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 封装意义一: 在设计类的时候,属性和行为 ...

  4. 操作系统考研复习——第四章(文件管理)

    操作系统考研复习--第四章(文件管理) 4. 文件管理 4.1 文件管理基础 4.1.1 文件的概念 1. 数据项.记录和文件 2. 文件属性 3. 文件系统的接口 4. 文件的基本操作 5. 文件的 ...

  5. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  6. 算法复习第四章动态规划

    算法复习第四章动态规划 动态规划 TSP问题 0-1bag 动态规划 TSP问题 0-1bag 最长公共子序列不考:

  7. C++编程入门系列之十四(类与对象:构造函数和析构函数)

    C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...

  8. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  9. 第三章类与对象基础 ① 笔记

    1. 内容回顾 1.1. 课前测试 1.2. 上节内容 2. 本章重点 2.1. 类和对象的概念 2.2. 类的基本组成 2.3. 构造方法 2.4. 成员方法 3. 具体内容 3.1. 类和对象的概 ...

最新文章

  1. PhoenixGo战胜绝艺,腾讯包揽AI围棋大赛前两名
  2. 最新消息!阿里四舍五入无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
  3. [渝粤教育] 西南科技大学 英语口语 在线考试复习资料
  4. linux命令详解(arm交叉编译器)
  5. Graham Scan凸包算法
  6. opencv︱图像的色彩空間cvtColor(HSV、HSL、HSB )及相关色彩学
  7. Qt5学习笔记之串口助手二:发送接收实现
  8. WPF 嵌入字体文件
  9. 工作中常用Linux命令总结一
  10. git几个救命的命令
  11. selenium安装和下载
  12. ncie全国计算机等级考试,国家信息化工程师认证考试(NCIE)
  13. ltsc教育许可激活_教育部征求有关开放许可要求的意见
  14. 滑动窗口(java)
  15. access里面的表达式运用_Access 如何使用表达式生成器
  16. 【C语言】简单的闰年计算
  17. leetcode 1723.完成所有工作的最短时间 - 二分+递归
  18. 如何搭建高质量、高效率的前端工程体系--页面结构继承
  19. 应用Python爬虫技术获取福彩历史数据
  20. layui totalRow 多层嵌套json_鹏华资产40亿产品兑付追踪:中招嵌套结构 或踩雷非标-基金频道...

热门文章

  1. 为专业电竞而生:努比亚红魔战地迷彩版空降ChinaJoy
  2. STM32 - CubeL4使用手册
  3. 运行CMD安装mysql系统报错_win10下mysql 8.0.15 winx64的安装与配置以及运行mysqld -initialize命令报错等问题解决...
  4. 即要会plc又要会c语言,PLC与单片机相比有什么优势?
  5. 一种针对滑动变阻器AD值采集线性化处理算法
  6. 深度解析JVM内存模型
  7. 【智能优化算法】基于免疫算法求解单目标优化问题附matlab代码
  8. 服务器网络信息有两个地址,实战案例:一台主机不能设置两个网关
  9. 阿里巴巴达摩院对话团队招聘研究实习生!
  10. 信息管理毕业设计 SSM的员工_学生宿舍后勤管理系统(源码+论文)