C++class

C++的class和其他的高级语言如C#/Java有些不一样。这是C++面向对象的核心。

创新互联建站服务项目包括嘉荫网站建设、嘉荫网站制作、嘉荫网页制作以及嘉荫网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,嘉荫网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到嘉荫省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

一点一点来: 

一 , 创建class

#include 
using namespace std;
class My_First_Class
{
    public:
    int a;
};
int main()
{
    My_First_Class c;
    c.a = 2;
    cout << c.a << endl;
    return 0;
}

重点:

①:创建类 , 需要用关键字class。

②:class也是一种数据类型,{}外面需要以;来结束。

注意点:

①:int a 不能被初始化 , 原因:class没被初始化之前是没有空间分配的,当然其所有的成员也是没有空间的。

C++ class

②:关于访问修饰符在C++中有3中 private , protected , public

    1, 在class中默认为private , 在struct中默认为public

    2, class中,访问修饰符可以有多个, 其作用范围为 : 其位置到下一个访问修饰符的位置(如果没有下一个访问修饰符则是到class结束位置既是 “}”),如下图:

C++ class

③:My_First_Class c; 这种初始化是把My_First_Class类对象c放在了栈区。其实可以将其放入堆去,其方案是利用指针。代码如下:

#include 
using namespace std;
class My_First_Class
{
    public:
        int a;
    private:
        int c;
};
int main()
{
    //My_First_Class c;
    //a = 2;
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    return 0;
}

   其结果如下图:

C++ class

到目前我们会发现一个很基础的问题 , 成员的初始化(如果等待调用者自己一个一个用代码实现初始化的话 ,很有可能会漏掉),当然在C#/Java等高级语言中 , 这个就不成问题了。

在C++中,提供了构造函数可以提供初始化的

#include 
using namespace std;
class My_First_Class
{
    public:
        int a;
    My_First_Class()
    {
        a = 1;
    }
    private:
        int c;
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

注意:

①:构造函数和C#/Java一样 , name使用class的名称 , 而且没有返回值

②:构造函数默认应该放在public之下,不然会报错。

③:构造函数必须要在需要初始化成员的后面创建,如要初始化a(int) , 必须在int a;的后面创建。

初始化列表:

#include 
using namespace std;
class My_First_Class
{
    public:
        int a;
    private:
        int c;
    public:
    My_First_Class():a(1),c(2)
    {
    }
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

注意:

①:My_First_Class():a(1),c(2) 赋值的顺序是a , c的声明的顺序:

C++ class

和在构造函数中:后面写的顺序无关:

如下面的写法,就不会得到预期的值:

#include 
using namespace std;
class My_First_Class
{
    public:
        int a;
        int m;
    My_First_Class():m(2),a(m)
    {
    }
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    cout << c.m << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

结果为:

C++ class

因为赋值的顺序是先a后m(a在m前进行了声明)

当然 , 构造函数也可以是有参的和C#/Java一样 , 这里就不讲了

二:类内声明 , 类外定义

#include 
using namespace std;
class My_First_Class
{
    public:
        int a;
        int m;
    My_First_Class():m(2),a(1)
    {
    }
    int sum();
};
int My_First_Class::sum()
{
    return a + m;
}
int main()
{
    My_First_Class c;
    int sum = c.sum();
    cout << c.a << endl;
    cout << sum << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

运行结果 :

C++ class

当然 , 这种只是演示(实际开发中不这么搞) 。 实际开发中 , 将声明写在都文件中 , 将实现写在源文件中:

定义一个头文件:

C++ class

实现:

#include 
using namespace std;
#include "HeadOne.h"

My_First_Class::My_First_Class()
{
    a = 10;
}
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

结果:

C++ class


当前文章:C++class
文章网址:http://pwwzsj.com/article/iieidg.html