zoukankan      html  css  js  c++  java
  • c语言struct和c++的class的暧昧

    c语言风格的封装 数据放在一起,以引用和指针的方式传给行为
    c++ 认为封装不彻底
      1数据和行为分开 对外提供接口
      2没有权限设置

    看看struct的一个例子

     1 //data.h
     2 
     3 //c语言风格的封装 数据放在一起,以引用和指针的方式传给行为
     4 //c++ 认为封装不彻底
     5     //1数据和行为分开 对外提供接口
     6     //2没有权限设置
     7 
     8 struct Date
     9 {
    10     int year;
    11     int month;
    12     int day;
    13 };
    14 
    15 
    16 void init(Date &d);
    17 void print(Date &d);
    18 bool isLeapVear(Date &d);
    //data.cpp
    
    #include <iostream>
    #include "data.h"
    using namespace std;
    
    void init(Date &d)
    {
        cin>>d.year;
        cin>>d.month;
        cin>>d.day;
    }
    
    void print(Date &d)
    {
        cout<<"year="<<d.year<<"month="<<d.month<<"day="<<d.day<<endl;
    }
    bool isLeapVear(Date &d)
    {
        if(d.year%4==0||d.year%100!=0||d.year%400==0)
            return true;
        else
            return false;
    }
    //strut.cpp
    
    
    
    #include <iostream>
    #include "data.h"
    using namespace std;
    //2017/1/14  c语言风格的封装 数据放在一起,以引用和指针的方式传给行为
    
    int main()
    {
        Date d;//此时才会开辟空间
        init(d);
        print(d);
        if(isLeapVear(d))
        {
            cout<<"d.year"<<"is a leap year"<<endl;
        }else
            cout<<"d.year"<<"is not a leap"<<endl;
        return 1;
    }

    然后再看看c++的class

    //data.h
    
    #ifndef DATE_H
    #define DATE_H
    
    namespace space
    {
        class Date{
        public:
            void init();
            void print();
            bool isLeapVear();
            int getyear();
            int getday();
            int getmonth();
    
        private:
            int year;
            int month;
            int day;
        };
    }
    
    #endif
     1 //data.cpp
     2 
     3 #include <iostream>
     4 #include "data.h"
     5 using namespace std;
     6 namespace space
     7 {
     8     void Date:: init()
     9     {
    10         cin>>year;
    11         cin>>month;
    12         cin>>day;
    13     }
    14     int Date::getyear()
    15     {
    16         return year;
    17     }
    18     int Date:: getmonth()
    19     {
    20         return month;
    21     }
    22     int Date:: getday()
    23     {
    24         return day;
    25     }
    26     bool Date:: isLeapVear()
    27     {
    28         if(year%4==0||year%100!=0||year%400==0)
    29             return true;
    30         else
    31             return false;
    32     }
    33 
    34     void Date:: print()
    35     {
    36         cout<<"year:"<<year<<"month"<<month<<"day"<<day<<endl;
    37     }
    38 }
     1 //main.cpp
     2 
     3 #include <iostream>
     4 #include "data.h"
     5 using namespace std;
     6 using namespace space;
     7 //2017/1/14
     8 
     9 //1 增加了权限控制 相对于c
    10     //private:
    11     //public:
    12 //2 数据和行为在一起,对本类是开放的 对外提供接口
    13 
    14 //声明很实现要分开
    15 
    16 
    17 //class MM
    18 //{
    19 //public:
    20 //    void init();
    21 //};
    22 //void MM::init();这两个类都有init 所以需要域名
    23 int main()
    24 {
    25     Date d;
    26     //d.year = 300;//直接访问不到 默认为私有的 修改为共有 则可以访问
    27     d.init();
    28     d.isLeapVear();
    29     d.print();
    30     if(d.isLeapVear())
    31     {
    32         cout<<d.getyear()<<"is a leap year"<<endl;
    33     }else
    34         cout<<d.getyear()<<"is not a leap"<<endl;
    35     return 0;
    36 }

    再不用各种传参。。。。。

  • 相关阅读:
    跨域问题(使用jsonp解决)
    通用Mapper使用(Maven+SSM)
    hosts文件修改(域名和IP地址对应修改)
    ExportExcel(用poi导出Excel文件:用List<Map<String,Object>>)
    activiti已结束子流程退回
    一个数据库死锁的案例
    mysql函数使用的例子
    mybatis拦截器
    Objects工具类
    Spring Boot 中读取配置属性
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6286420.html
Copyright © 2011-2022 走看看