类的定义放在头文件,类的成员函数的定义放在实现文件
******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; // 在全局变量前面加上::来使用全局变量加以区别。 } |