面向对象的编程(一)

来源:互联网 发布:80c51系列单片机 编辑:程序博客网 时间:2024/06/06 09:31

类与对象

1、类的声明

格式:class 类名称

      {

          public:

          private:

          protected:

      }

关键字public后面的指的是类与外部的接口,任何函数都可以访问的公有数据类型和函数

关键字private后面声明只允许本类中的函数访问,而类外部的任何函数都不能访问

关键字protected后面声明,与private类似,其差别表现在继承与派生时对派生类的影响不同

 

2、classstruct

class数据成员默认私有,struct数据成员默认公有

class的对齐方式与结构体一致(字对齐或者半字对齐),大小的计算方法与结构体一致

 

3、this指针

对于类中方法的共享,可以通过this指针来区别是谁调用这个方法(函数)

This指针保存的是调用这个方法的对象的地址;在调用时使用this指针,当调用这个方法是系统会自动生成this指针

 

构造函数与析构函数

1、构造函数概念及其作用

构造函数是特殊的成员函数,创建类类型的新对象,系统自动会调用构造函数

作用:为了保证对象的每个数据成员都被正确初始化

 

2、构造函数特点

①函数名与类名完全相同

②不能定义构造函数的类型(返回类型),也不能使用void

③通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用

④构造函数被声明为私有,有特殊的用途

⑤构造函数可以有任意类型和任意个数的参数,一个类可以有多个构造函数

 

3、默认构造函数

 默认构造函数表示不带参数的构造函数,如果程序中未声明,则系统会自动生成默认构造函数

注:当一个类没有构造函数时,系统会自动为类生成一个无参的构造函数;当有构造函数时,系统不会自动生成,需手动添加

 

4、转换构造函数

有一个参数的构造函数称为转换构造函数,其作用为将任意类型转化为类类型,但类的构造函数只有一个参数是非常危险的,因为编译器可以使用这种构造函数把参数的类型隐式转换为类类型

例:

默认构造函数:

Test::Test()

{

x_ = 0;

cout << “Initializing Default” << endl;
}

转换构造函数:

Test::Test(int num)

{

x_ = num;

cout << ”Initializing” << x- << endl;

}

int main(void)

{

Test t(10);//带一个参数的构造函数,充当的是普通构造函数的功能

T = 20;//20这个整数赋值给t对象

            //1、调用转换构造函数将20这个整数转换成类类型(生成一个临时对象)

           //2、将临时对象赋值给t对象(调用的是=运算符)

    return 0;

}

 

5、赋值与初始化的区别

在初始化语句中的等号不是运算符,编译器对这种表示方法有特殊的解释

Test& Test::operator = (const Test& other);

例:运算符重载:

Test& Test::operator = (const Test& other)

{

cout << “Test::operator = ” << endl;

if(this ==&other)

{

    .......

    return *this;

}

num_ = other.num_;

return *this;

}

 

6、explicit关键字

只提供给类的构造函数使用的关键字,编译器不会把声明为explicit的构造函数用于隐式转换,它只能在程序代码中显示创建对象

 

7、构造函数初始化列表

Test::Test(int x):x_(x),num(x)

const成员的初始化只能在构造函数初始化列表中进行

②引用成员的初始化只能在构造函数初始化列表中进行

③对象成员(对象所对应的类没有默认构造函数)的初始化只能在构造函数初始化列表中进行

 

8、枚举访问方式

cout << Test::SUCCESS <<endl;

 

9、拷贝构造函数

功能:使用一个已经存在的对象来初始化一个新的同一类型的对象

声明:只有一个参数并且参数为该类对象的引用

注:如果类中没有说明拷贝构造函数,则系统自动生成一个缺省复制构造函数,作为该类的公有成员

 

10、拷贝构造函数的使用情况

①用已有对象初始化对象会调用拷贝构造函数

②当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用

③当函数的返回值是类对象,函数执行完成返回调用者时使用

 

0 0