第3章---类和对象

来源:互联网 发布:美国劳工统计局数据 编辑:程序博客网 时间:2024/05/22 16:55

1、C++规定,默认情况下,结构中成员是public,类中成员是private


2、成员函数的定义

     必须使函数体与inline说明结合在一起,否则编译器将它作为普通函数处理。

class point{private:int x, y;public:void setpoint(int, int);};inline void point::setpoint(int a, int b){x = a;y = b;}
       若声明成: inline void setpoint(int, int);不能说明这是一个内置函数


3、析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数。


4、重载构造函数


5、拷贝构造函数

      每个类都必须有一个拷贝构造函数,要么是默认的,要们自己定义   

#include<iostream>using namespace std;class point{int x, y;public:point(int a, int b){x = a;y = b;}point(const point &p){x = 2*p.x;y = 2*p.y;}};int main(){point p1(1,3);point p2(p1); //拷贝point p3 = p1;//拷贝,若自己没有定义,调用默认的return 0;}

      通常默认的就可以,但是若类中有指针类型时,按成员复制的方法有时会产生错误。


6、对象数组、对象指针、this指针

      this是操作成员函数的对象的地址, *this是操作成员函数的对象

      this指针是一个const指针,不能在程序中修改或者给他赋值

      this指针是一个局部数据,它的作用域仅在一个对象的内部


7、静态成员

      静态数据成员:(1)属于类

                                  (2)不能在类中进行初始化。默认为0

      静态成员函数


8、

static全局变量普通全局变量只堆定义它的文件可见可以用于所有源文件
static局部变量普通全局变量第一次初始化后到结束一直存在不一直存在,只在函数调用时存在

static函数
普通函数只能在声明文件中可见 

9、友元

      友元函数:可以访问类对象的各个私有数据,但不是成员函数。

      友元成员:一个类的成员函数可以作为另一个类的友元 

#include<iostream>#include<string.h>using namespace std;class girl;class boy{char *name;int age;public:boy(char *n, int d){name = new char[strlen(n)+1];strcpy(name,n);age = d;}void disp(girl &);//声明disp为boy的成员函数~boy(){delete name;}};class girl{char *name;int age;public:girl(char *n, int d){name = new char[strlen(n)+1];strcpy(name,n);age = d;}friend void boy::disp(girl &);//声明boy的成员函数为类girl的友元函数~girl(){delete name;}};void boy::disp(girl &x){cout<<"boy\''s name is: "<<name<<", age: "<<age<<endl;cout<<"girl\'s name is: "<<x.name<<", age: "<<x.age<<endl;}int main(){boy b("lilei",25);girl g("xiaohong",23);b.disp(g);return 0;}

      友元类:

#include<iostream>#include<string.h>using namespace std;class girl;class boy{char *name;int age;public:boy(char *n, int d){name = new char[strlen(n)+1];strcpy(name,n);age = d;}void disp(girl &);~boy(){delete name;}};class girl{char *name;int age;friend class boy; //声明类boy为类girl的友元public:girl(char *n, int d){name = new char[strlen(n)+1];strcpy(name,n);age = d;}~girl(){delete name;}};void boy::disp(girl &x){cout<<"boy\''s name is: "<<name<<", age: "<<age<<endl;cout<<"girl\'s name is: "<<x.name<<", age: "<<x.age<<endl;}int main(){boy b("lilei",25);girl g("xiaohong",23);b.disp(g);return 0;}

10、类对象作为成员

#include<iostream>#include<string.h>using namespace std;class boy{char *name;public:boy(char *n){name = new char[strlen(n)+1];strcpy(name,n);}void disp(){cout<<name<<endl;}~boy(){delete name;}};class girl{boy name;  //name为类girl的对象成员int age;public:girl(char *n, int d):name(n){age = d;}void disp(){name.disp();cout<<"age: "<<age<<endl;}~girl(){}};int main(){girl g("lilei",25);g.disp();return 0;}

11、常类型

        常引用

        常对象:常对象只能调用它的常成员函数,而不能调用普通成员函数

        常对象成员:

              (1)常数据成员:构造函数只能通过初始化列表堆该数据成员进行初始化,任何其他函数都不能堆它赋值

#include<iostream>#include<string.h>using namespace std;class Date{private:const int year;    //常数据成员public:Date(int y);void show();const int &r;};Date::Date(int y):year(y),r(year){}inline void Date::show(){cout<<"r= "<<r<<endl;cout<<"year= "<<year<<endl;}int main(){Date date(1999);date.show();return 0;}

              (2)常成员函数:不能更新对象数据成员,也不能调用该类中的普通成员函数

#include<iostream>#include<string.h>using namespace std;class Date{private:const int year;    //常数据成员public:Date(int y);void show();void show() const; //const支持重载};Date::Date(int y):year(y){}void Date::show(){cout<<"year= "<<year<<endl;}void Date::show() const{cout<<"year= "<<year<<endl;}int main(){Date date1(1999);date1.show();const Date date2(2009); //常对象date2.show();return 0;}

原创粉丝点击