Loading

c++学习记录(二)

c++面向对象之类&对象

c++有面向对象开发的四大特征:封装、抽象、继承、多态。类是c++的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,所有东西都可以是对象,类中的数据和方法称为类的成员,如一个类中的函数是类的成员。

(1)定义类、对象以及访问数据成员

定义类

定义类需要使用关键字class,格式如下:

\\class name
{
    访问修饰符:
        body
};

面向对象编程中数据封装防止函数直接访问类类型的内部成员。类成员访问限制通过访问修饰符实现,访问修饰符介绍如下表:

修饰符类型 关键字 作用
公有成员 public 不使用成员函数而可以设置和获取公有变量的值
私有成员 private 私有成员在类外部不可访问,只有使用成员函数和友元函数才能访问
保护成员 protected 与私有成员相似,但可以在子类中访问

定义对象

类似在基本类型中定义变量

\\name xname; //name为类名,xname为对象名

访问数据成员

类的公共数据可以直接使用访问运算符.来访问,而私有和保护成员要使用成员函数进行访问。

(2)类成员函数

类成员函数指定义和原型写在类定义内部的函数。成员函数可以定义在类定义内部,或者单独使用范围解析运算符::来定义。如:

\\class name #直接在类定义内部定义函数
{
    public:
        double function()
        {
            body
        }
};

double name::function() //在类外部使用范围解析运算符::定义函数
{
    body
}

(3)类构造函数&析构函数

类构造函数

构造函数与类的名称相同,它会在每次创建类的新对象时执行,若不自定义则会默认定义,不会返回任何类型。构造函数可用于为成员变量设置初始值。需要时,构造函数也可以带参数。

\\class name
{
    public:
        name();     //这是构造函数,可加参数
};

类构造函数还可使用初始化列表来进行快速初始化变量

\\name::name(double a,double b,double c):X(a),Y(b),Z(c)
{
    body
}
//类似于下代码
name::name(double a,double b,double c)
{
    X=a;Y=b;Z=C;
    body
}

类的析构函数

类的析构函数与类的名称相同,只是需要在前加上符号~,它会在每次删除所创建的对象是执行,同样不会返回任何值。析构函数作用是在跳出程序前释放资源。

\\class name
{
    ~name(); \\这是析构函数
}

(4)拷贝构造函数

拷贝构造函数在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。通常用于:

·通过使用另一个同类型的对象来初始化新创建的对象

·复制对象把它作为参数传递给函数

·复制对象,并从函数返回这个对象

如果类带有指针变量并由动态内存分配,则必须有一个拷贝构造函数,格式如下:

\\classname(const classname &obj)
{
    body
}

具体拷贝构造函数是什么意思,怎么用?我还搞不清楚,就简单记住一些我能看懂的。

(5)友元函数

类的友元函数是定义在类外部,能访问私有和保护成员的函数,但友元函数并不是成员函数。友元可以是一个函数,也可以是一个类。友元类中所有成员都是友元的(那友元类中能有函数吗?这个函数是不是成员函数?)。声明类定义中友元,需要使用关键字friend

\\friend 数据类型 function;

(6)内联函数

如果一个函数是内联函数,在编译时,编译器将把该函数的代码放置在每个调用该函数的地方。因此内联函数是一种以空间换时间的方法,即空间消耗增加,时间消耗减少,且每一次修改内联函数都需要重新编译。内联函数需要在函数名前门加关键字inline。在类定义中定义的函数都是内联函数,默认使用inline关键字。内联函数有以下注意:

·一般都是10行一下的小函数

·内联函数内不允许使用循环语句和开关语句

·内联函数的定义必须出现在内联函数第一次调用之前

·类结构中所在的类说明内部定义的函数是内联函数

(7)this 指针

c++中this指针是所有成员函数的隐含参数,因此this指针可以用来调用对象,但友元函数没有this指针,因此友元函数不是成员函数。this指针在成员函数中用法与指针类似。

(8)类的静态成员

使用static关键字把类成员定义为静态。静态成员在类的所有对象中共享。静态成员的初始化不能放置在类的定义中,但可以在类的外部通过使用范围解析运算符::来初始化。

静态成员函数

静态成员函数在类对象不存在的情况下也能调用,只要使用类名加范围解析运算符::就可以访问。但是这会让静态成员函数与普通成员函数产生区别。

·静态成员函数没有 this 指针,只能访问静态成员

·普通成员函数有 this 指针,可以访问类中的任意成员

总结:c++面向对象编程部分知识庞大,仅仅只是开头的第一部分就有很多知识。这部分我认识了类与对象,以及类中的各种各样的使用和定义,期待下一部分的学习。

posted @ 2020-01-29 13:58  洋洋羊羊  阅读(205)  评论(0编辑  收藏  举报