c++学习笔记(入门)


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