1 struct和class的区别

struct成员变量(成员函数)的访问属性缺省的情况下默认为public。

class成员变量(成员函数)的访问属性缺省的情况下默认为private。

2 初始化列表

class通过构造函数有两种初始化方式:

(1)在构造函数中通过赋值进行初始化

(2)用初始化列表初始化

两种初始化差异:构造函数中通过赋值初始化并不是构造函数初始化的时候完成的,要晚于构造函数的初始化。而初始化列表是是在初始化构造函数的时候初始化的,尤其是在初始化对象的时候,采用初始化列表的方式初始化,不然会有不必要的麻烦。所以建议都使用初始化列表进行初始化

Example

(a)在构造函数中用赋值进行初始化时报错

 1 class Tom
2 {
3 public:
4 Tom(int i)
5 {
6 }
7 ~Tom()
8 {
9 }
10 };
11
12 class Cat
13 {
14 private:
15 string type;
16 string name;
17 int age;
18 Tom tom;
19 public:
20 Cat()
21 {
22 type = "";
23 name = "";
24 age = 0;
25 tom = 0;
26 }
27 ~Cat()
28 {
29 }
30 };

报错内容: error: no matching function for call to 'Tom::Tom()'

(b) 用初始化列表初始化问题得到解决

 1 class Tom
2 {
3 public:
4 Tom(int i)
5 {
6 }
7 ~Tom()
8 {
9 }
10 };
11
12 class Cat
13 {
14 private:
15 string type;
16 string name;
17 int age;
18 Tom tom;
19 public:
20 Cat():tom(0), type(""), name(""), age(0)
21 {
22 }
23 ~Cat()
24 {
25 }
26 };

3 组合、继承

3.1 组合

组合玩的是类的对象(实的),也就是把另一个类的对象作为他的成员变量

Example

 1 /* 组合 */
2 class Huluwa
3 {
4 private:
5 string name;
6 string ability;
7 public:
8 Huluwa(int i):name(""), ability("")
9 {
10
11 }
12 ~Huluwa()
13 {
14 }
15 };
16
17 class Dawa
18 {
19 private:
20 Huluwa huluwa;
21 public:
22 Dawa(int i):huluwa(0)
23 {
24 }
25 ~Dawa()
26 {
27 }
28 };

3.2 继承

继承玩的是类(虚的),把父类的成员继承过来

Example

 1 /* 继承 */
2 class Huluwa
3 {
4 private:
5 string name;
6 string ability;
7 public:
8 Huluwa(int i):name(""), ability("")
9 {
10 }
11 ~Huluwa()
12 {
13 }
14
15 void SetName(string name_)
16 {
17 name = name_;
18 }
19 };
20
21 class Dawa : public Huluwa
22 {
23 public:
24 Dawa(int i):Huluwa(0)
25 {
26 }
27 ~Dawa()
28 {
29 }
30 };

继承的访问权限

public 子类可以直接访问、修改父类的所有public限制的成员变量和方法

private 子类拥有父类的所有的变量,但不能直接修改和访问,只能通过public接口访问

protected 对于子类跟public的权限一样,但对于其对象,权限与private一样

参考资料

感谢B站 up主【编程不止Coding】整理的视频 --> 面向对象设计C++-- 浙江大学 -- 翁恺 --国家精品课程(附源代码)

https://www.bilibili.com/video/BV1yQ4y1A7ts?from=search&seid=1378598890214751734&spm_id_from=333.337.0.0

最新文章

  1. POJ 2503 字典树
  2. Visual Studio一秒变Node.js IDE
  3. JQuery Mobile + Cordova 实战一
  4. 责任链模式(Chain of Responsibility Pattern)
  5. HDOJ(HDU) 1718 Rank(水题、、、)
  6. 安装Visual Studio 2010之后怎样安装MSDN Library
  7. 常用SQL语句学习整理
  8. SRM 585 DIV 1 总结
  9. spring boot入门
  10. 【已解决】React中配置Sass引入.scss文件无效
  11. jsonp实现ajax跨域
  12. C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
  13. 洛谷P1605走迷宫
  14. XOR+base64加密
  15. docker-compose编排
  16. POJ 1125 Stockbroker Grapevine(最短路基础题)
  17. Programming 2D Games 读书笔记(第三章)
  18. 浅谈脚本化css(一)
  19. C#类和结构体的异同点简单总结
  20. Jmeter测试带加密参数的接口

热门文章

  1. 《Java基础——数组的定义与使用》
  2. 前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件
  3. Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统
  4. nginx反向代理单独的java项目配置示例
  5. shell脚本中执行source命令不生效的解决办法
  6. CentOS7配置nodejs环境
  7. 2. Fluentd事件的生命周期
  8. 关于VirtualBox在新建虚拟机时-选择操作系统类型后没有64位的版本选项
  9. PHP全栈开发:在本机上创建虚拟主机与域名
  10. flinksql读写redis