小知识点

  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. Android 事件分发 简单学
  2. 【Python3_进阶系列_006】Python3-单例模式
  3. 比Visio快10倍的画图工具来了!赶紧整上~
  4. Win32 API 枚举打印机
  5. python 学习 [day6]
  6. 【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数
  7. Mac安装mysql8.x最简洁的步骤,避免采坑
  8. Linux: 利用 Alpine 在命令行里访问 Gmail
  9. ssas脚本组织程序_脚本调试编辑
  10. 重磅 CV、NLP 算法赛,科大讯飞2020 A.I.开发者大赛正式启动!
  11. vue element new vue const
  12. 互换元素(swap,swap_ranges)
  13. lammps教程:Ovito分析并绘制单原子应变方法
  14. PCB layout的基本原则
  15. 开源流媒体SRS结合硬件视频实时转码服务器的部署
  16. 猿辅导python助教面试两次都有什么内容_猿辅导面试信息第一手揭秘,小伙伴们看过来!...
  17. ndnSIM学习(十)——apps之ndn-producer.cpp和ndn-consumer.cpp源码分析
  18. 基于ssm+shiro+activiti的办公自动化系统
  19. mysql dump 1449_mysqldump: Got error: 1449
  20. 新学期——学习计划大挑战

热门文章

  1. Red Hat 7完全卸载MySQL
  2. 数据库连接池dbcp配置
  3. Ping的常见的问题
  4. Java class 文件反编译工具JD-GUI下载安装使用教程(好用)
  5. iReport 4.1 报表制作,子报表,实例解析
  6. voip的会议服务器Conference Servers
  7. 阿贾克斯(AJAX)
  8. 低压低速引射器的计算(二)(观点)
  9. 使用 ajaxFileUpload 进行图片上传
  10. 美国硕士计算机专业排名,2021美国硕士计算机专业排名