类成员函数、类的作用域和可见性

类的定义放在头文件,类的成员函数的定义放在实现文件
******tdate.h******
class Tdate{                          // 类的定义(含有那些成员属性和成员函数)放在头文件.h里面
   public:                               // 为什么成员函数放在头文件?
                                            // 因为成员函数式inline函数,inline函数是需要放在头文件里面的,同时成员函数放在头问价作为对外接口。
      void set(int,int,int);             
      int isLeapYear();
      void print();
   private:
      int month;
      int day;
      int year;
}
****** tdate.cpp ******
#include <iostream>
using namespace std;
void  Tdate::set(int m,int d,int y){      // 成员函数前面加上Tdate::是必须的,因为只有这样才把set()看作是类Tdate的成员函数,否则默认是全局函数
  month=m;
  day=d;                               //注意其实set()有四个参数,set( const*this,int m,int d,int y)第一个参数即是创建的对象的一个常量指针
  year=y;                              //因为set()函数的代码放在代码区,是所有对象Tdate t1,Tdate t2....所共享的,但是每个对象都有自己的内存空间
}                                          //那么在函数调用的时候就需要区别对待内存空间中的month,day,year是属于哪个对象的,所以加上一个const* this
                                           //这样以后每次不同对象t1,t2调用方法赋值的时候就可以对各自的属性赋值。

int  Tdate::isLeapYear(){
    return (year%4==0 || year%100!=0 )||(year%400==0);
}
void  Tdate::print(){
    cout<<month<<day<<year<<endl;
}

成员函数的const用法

class Student{
   public:
     void fn()  const{
          // to do
     }
     void fn1(){
     
     }

}
在成员函数fn()后面加上const,表示该 函数不可以修改类student的属性,同时为了保证这一点,也 不可以调用后面没有const的其他成员函数fn1()等
假如:  函数后面加上了const,但是其内部又修改了对象的属性,那么这个是不可以被编译通过的。

另外:
const Student s1;
对象前面加上const的意思是,该 对象的成员属性不可以改变。 同样 该对象只可以调用后面带const的成员函数,不可以调用其他非const的成员函数。
目的是保证该对象的属性不被改变。

后面我会写一篇关于const用法的总结。


类的作用域和可见性

类的作用域:
1.类的成员函数是可以访问到所有其他的成员(成员属性和成员函数)。
2.类的属性被局部变量隐藏了。
class X{
  private int m;
}
void X :: fn1(){
   int m;
   m=2;   // 这里的m把类X的属性m隐藏了。
}

类的可见性:有同名的类名,函数和属性怎么处理。
class X{
}
void fn(int X){
   class X x;        // 在类前面加上class来区别
   X++;
}
int x=0;
void fn(){
   class X{}
   X x;
   :: x=3;          // 在全局变量前面加上::来使用全局变量加以区别。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值