4.1类及其实例化

类(class)是面向对象程序设计(OOP)实现信息封装的基础。

类是用户定义类型,也称为类类型。

每个类包含数据说明和一些操作数据或传递消息的函数。类的实例称为对象。

C++的类有C的结构类型演变而来。本章首先介绍结构类型,然后讨论C++的类和对象。

5.1结构

结构由数目固定的成员构成。

各成员可以具有不同的数据类型。

一个结构变量在内存占有一片连续的存储空间。

5.1.1定义结构和访问结构

1.定义结构

可以用不同方法定义一个结构变量

(1)声明类型之后声明变量

(2)声明类型的同时声明变量

(3)直接声明结构类型变量

//C++的结构的数据成员可以默认有默认的值

//匿名结构体,限量版

 1 #include <iostream>
 2 
 3 struct MyStruct
 4 {
 5     int num;
 6     double db = 10.8;//C++的结构的数据成员可以默认有默认的值
 7 };
 8 
 9 struct
10 {
11     int num;
12     double db = 10.8;//C++的结构的数据成员可以默认有默认的值
13 }sx, sy;//匿名结构体,限量版
14 
15 void main()
16 {
17     MyStruct s1;
18 
19     std::cout << s1.db << std::endl;//10.8
20     
21     system("pause");
22 }

一个结构类型的成员可以是另一个已定义的结构类型

 1 struct MyStruct
 2 {
 3     int num;
 4     double db = 10.8;
 5     void boss()//函数
 6     {
 7 
 8     }
 9 };
10 
11 struct
12 {
13     int num;
14     double db = 10.8;
15     MyStruct boss1;//一个结构类型的成员可以是另一个已定义的结构类型
16 }sx, sy;

错误:不能实现的无穷递归结构

//error C2460: “MyStruct::sx”: 使用正在定义的“MyStruct”

1 struct MyStruct
2 {
3     int num;
4     double db = 10.8;
5     MyStruct sx;//error C2460: “MyStruct::sx”: 使用正在定义的“MyStruct”
6 };

5.2类与对象

面向对象编程的程序基本单位是类。

类是数据和操作数据的函数的封装。

类的对象使用自己的方法完成对数据的操作。

类可以隐藏数据和操作细节,对象通过类接口与外部通信。

C面向过程管理进程

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <windows.h>
 4 
 5 void open(const char *path, const int mode)//输入名称和打开模式,打开一个程序
 6 {
 7     ShellExecuteA(0, "open", path, 0, 0, mode);
 8 }
 9 
10 void all()//显示所有进程
11 {
12     system("tasklist");
13 }
14 
15 void closebyname(const char *name)//通过进程名,关闭进程
16 {
17     char cmdstr[100] = { 0 };
18     sprintf(cmdstr, "taskkill /f /im %s", name);
19     system(cmdstr);
20 }
21 
22 void closebypid(const int num)//通过PID,关闭进程
23 {
24     char cmdstr[100] = { 0 };
25     sprintf(cmdstr, "taskkill /pid %d", num);
26     system(cmdstr);
27 }
28 
29 void main()
30 {
31     all();//显示所有进程
32 
33     open("notepad", 1);//输入名称和打开模式,打开一个程序
34 
35     all();//显示所有进程
36 
37     Sleep(2000);//暂停
38 
39     //closebyname("notepad.exe");
40 
41     int num;
42 
43     scanf("%d", &num);
44 
45     closebypid(num);//通过PID,关闭进程
46         
47     system("pause");
48 }

//C++类的继承实现代码重用,C的代码重用主要依赖函数

//类的封装实现权限,封装,数据与代码合为一体,C的封装主要是函数

//封装可以锁定代码的权限,锁定的数据的权限,避免被随意调用

//类的多态,一个接口根据实际需求完成很多不同的功能

C++面向对象管理进程

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <iostream>
 3 #include <windows.h>
 4 
 5 //C++类的继承实现代码重用,C的代码重用主要依赖函数
 6 //类的封装实现权限,封装,数据与代码合为一体,C的封装主要是函数
 7 //封装可以锁定代码的权限,锁定的数据的权限,避免被随意调用
 8 //类的多态,一个接口根据实际需求完成很多不同的功能
 9 
10 class cmduse
11 {
12 private:
13     char cmduser[100];//存储用户名
14     char cmd[100];//存储命令
15 public:
16     void setuser(const char *name)//设置用户名
17     {
18         strcpy(cmduser, name);
19     }
20     char *getuser()//返回用户名
21     {
22         return this->cmduser;
23     }
24     void open(const char *path, const int mode)//输入名称和打开模式,打开一个程序
25     {
26         ShellExecuteA(0, "open", path, 0, 0, mode);
27     }
28     void all()//显示所有进程
29     {
30         system("tasklist");
31     }
32     void closebyname(const char *name)//通过进程名,关闭进程
33     {
34         memset(this->cmd, 0, sizeof(this->cmd));
35         sprintf(this->cmd, "taskkill /f /im %s", name);
36         system(this->cmd);
37     }
38     void closebypid(const int num)//通过PID,关闭进程
39     {
40         memset(this->cmd, 0, sizeof(this->cmd));
41         sprintf(this->cmd, "taskkill /pid %d", num);
42         system(this->cmd);
43     }
44 };
45 
46 void main()
47 {
48     cmduse cmduse1;
49 
50     cmduse1.setuser("hello");//设置用户名
51 
52     std::cout << cmduse1.getuser() << std::endl;//返回用户名
53 
54     cmduse1.open("calc", 1);//输入名称和打开模式,打开一个程序
55     cmduse1.open("notepad", 1);//输入名称和打开模式,打开一个程序
56 
57     Sleep(2000);//暂停
58 
59     cmduse1.all();//显示所有进程
60 
61     cmduse1.closebyname("calc.exe");//通过进程名,关闭进程
62 
63     int pid = 0;
64     
65     std::cin >> pid;
66 
67     cmduse1.closebypid(pid);//通过PID,关闭进程
68 
69     system("pause");
70 }

//union本质也是一个类,可以内部有函数

//union同一对象内部数据是共享的,不同对象之间是独立的,代码是共享的

//union具备结构体所有功能

//时时刻刻共用体只有一个变量存在

//某些节约内存的类,需要用到共用体

 1 #include <iostream>
 2 
 3 //union本质也是一个类,可以内部有函数
 4 //union同一对象内部数据是共享的,不同对象之间是独立的,代码是共享的
 5 //union具备结构体所有功能
 6 //时时刻刻共用体只有一个变量存在
 7 //某些节约内存的类,需要用到共用体
 8 
 9 union MyUnion
10 {
11     int a;
12     int num;
13     double db;
14     void go()
15     {
16 
17     }
18 };
19 
20 void main()
21 {
22     std::cout << sizeof(MyUnion) << std::endl;//8
23 
24     MyUnion union1;//创建一个联合的对象
25 
26     union1.num = 20;//赋值
27 
28     std::cout << union1.num << std::endl;//20
29 
30     union1.db = 10.9;//赋值
31 
32     std::cout << union1.num << std::endl;//乱码
33 
34     system("pause");
35 }

//内部数据是共享的,不可以继承

//error C2570: “MyUnionA”: 联合不能有基类

 1 union MyUnion
 2 {
 3     int a;
 4 private:
 5     int num;
 6     double db;
 7     void go()
 8     {
 9 
10     }
11 };
12 
13 //内部数据是共享的,不可以继承
14 
15 union MyUnionA :public MyUnion//error C2570: “MyUnionA”: 联合不能有基类
16 {
17 
18 };

//空类占一个字节,表明类的存在

//代码不计入sizeof

不能取类的地址,可以取类的对象的地址

//error C2275: “kong”: 将此类型用作表达式非法

 1 #include <iostream>
 2 
 3 class kong
 4 {
 5 
 6 };
 7 
 8 //空类占一个字节,表明类的存在
 9 //代码不计入sizeof
10 
11 void main()
12 {
13     std::cout << sizeof(kong) << std::endl;//1
14     
15     //std::cout << &kong << std::endl;//error C2275: “kong”: 将此类型用作表达式非法
16     
17     kong kong1;
18 
19     std::cout << &kong1 << std::endl;
20     
21     system("pause");
22 }
原文地址:https://www.cnblogs.com/denggelin/p/5657097.html