C++中各种数据成员及成员函数的定义及使用

来源:互联网 发布:郑州网络电视台节目表 编辑:程序博客网 时间:2024/06/05 15:40

C++中各种数据成员及成员函数的定义及使用

(2011-09-27 09:39:18)
转载
标签:

c

静态成员

常量成员函数

定义

访问方式

it

分类:IT笔试面试

1.类是自定义的数据类型.类与应用程序不同,类的功能虽然独立,但不能独立启动,就象汽车零件那样.

2.Class 是一种数据类型, 其变量为对象.对象包含有membervariables(成员变量)和memberfunctions(成员函数).

class Date{
  int year, month, day;
public:
  void set(int y,int m,int d); // 赋值操作
  boolisLeapYear();             // 判断闰年
  voidprint();                   // 输出日期
};

3.在类(class)中 , 成员函数及成员变量会分为两大类 : public members(公开成员)、private members(私有成员)
1.) public members :被定义为public members 的成员函数及成员变量, 可在任何的函数中被使用 .包括main函数,及其它非成员函数.

2.) private members :被定义为private members的成员函数及成员变量 , 只能在成员函数中被使用 .

4.成员函数类外部定义时,在函数名称前应加上日期类名前缀Date和命名空间引导符“::”,它表示着自己属于某一个名空间(类),与普通函数相区别。

void Date::set(int y,int m,intd)  year=y;  month=m; day=d;  }

成员函数可以在类内,也可以在类外定义,若在类内定义,则默认为内联函数(inline

5.对象是拥有操作的实体,是由类创建的

6.访问成员函数的方式

 (1)对象方式   Dated;   d.set(2011,12,5);

 (2)对象指针方式
 Date* dp = new Date;
  dp->set(2011,12,5);
  // …
  delete dp;

7.成员函数的操作,如果只对对象进行读操作,则该成员函数可以设计为常对象成员函数,好处是让使用者一目了然的知道该成员函数不会改变对象值,同时让类的实现者更方便地调试。

常成员函数声明和定义在形式上必须一致,即在函数形参列表的右括号后面加上const。如

 class Date{
 pubilc:
 void set(int y,int m,int d);
 void print()const;
…}

 inline void Date::print()const
{
cout<<setfill('0');
 cout<<setw(4)<<year<<'-'<<setw(2)<<month<<'-'<<setw(2)<<day<<'\n';
  cout<<setfill('');
}

8.常成员函数  对捆绑的对象,不允许写操作
函数的常量参数  对传递的参数,不允许写操作
例如:
  boolDate::comp(const Date& a)const

{
    year = 2005;// error: 常成员函数捆绑的对象
    a.year =2003;  // error: 常量对象
    returnyear==a.year &&
          month==a.month &&
          day==a.day;
  }

9.一个整型变量的前增量操作的结果与变量值是一样的,而且前增量操作的结果是左值,操作可以连贯,而后增量操作的结果是增量之前的变量值,它是临时变量,当表达式计算工作完成后,该临时变量随即消失,所以变量最终值与后增量结果是错位的,

如: int a=1,b=1,c=1,d=1;
 (++a)++; //a结果为3
  (b++)++;//结果b=2,(b++)的结果是临时变量,在其加1随后又抛弃
 ++(++c);//结果c=3
 ++(d++);//结果d=2,与b相似
10.C++将struct纳入了类机制中,struct也可以包含成员函数,与class的区别在于关键字不同默认的访问控制符不同,struct默认访问控制符为public。

11.类的静态数据成员,保证每个类只有一个实体每个对象不再有它的副本。如:

#include<iostream>
using namespace std;
//-------------------------------------
class Student{
  static intnumber;
  string name;
public:
  void set(string str)

{
    name =str;
   ++number;
  }
  void print()

{

cout<<name<<"-> students are"<<number<<"numbers\n";

}
};

int Student::number =0; //静态数据成员在类外分配空间和初始化
//-------------------------------------
void fn()

{
  Student s1;
  s1.set("Jenny");
  Student s2;
  s2.set("Randy");
  s1.print();
}

int main()

{
  Student s;
  s.set("Smith");
  fn();
  s.print();

system("pause");

return 0;
}

程序执行结果:Jenny->students are3numbers

                        Smith->students are3numbers

12.静态成员函数一般设计为公有的,以访问私有静态数据成员为目的.调用方式是以类名加域操作符::后跟静态成员函数.如:

class Student{
  static intnum;     // 静态私有成员
  stringname;
  //...
public:
  // ...
 
static void showNum()

{
  cout<<num<<“\n”;  // 访问静态私有成员
}
};
int Student::num = 0; //静态数据成员初始化
int main()

{
  Student s;
 s.showNum();       // 可行,但非标准
  Student::showNum(); //静态成员函数调用
}

13.静态成员函数的定义在类外边时,类名前应该免去static,只在声明时必要。
静态成员函数不能访问本类中非静态的数据成员。但可以访问传入对象的私有成员

void showNum(Student&s)

{
   cout<<name<<“\n”;   // 错 访问私有成员
 cout<<s.name<<“\n”;  // 访问给定对象的私有成员
 }