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 }

 

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

 

转载于:https://www.cnblogs.com/lanjianhappy/p/6286420.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值