zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    【K8s】二进制部署Kubernetes v1.8.15集群环境管理Docker容器
    swift开发笔记10
    解读苹果app证书和描述文件
    swift开发笔记09
    swift开发笔记07
    swift开发笔记08
    默认显示detailViewController
    金融理财类app,被苹果审核拒绝
    swift开发笔记05
    Git安装图解
  • 原文地址:https://www.cnblogs.com/denggelin/p/5657097.html
Copyright © 2011-2022 走看看