ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第一周OOP1

2021-09-19 17:32:51  阅读:94  来源: 互联网

标签:函数 第一周 int 成员 OOP1 class 类名 构造函数


类是面向对象程序设计基础,是c++封装的基本单元。在类中说明的要么是数据成员,要么是成员函数,他们可以是public:,protected: ,private:的。在C++中,默认是private。

一个类对象所占据的内存空间由数据成员决定,成员函数不占据对象内存空间。

class Date
{
int month;
int year;
int day;
//数据成员day 的全名是Date:: day.
public:
void set(int a,int b, int c)
/*set 全名是Date::set(int a,int b, int c)。
类名指出set是自己的成员函数,而不是其他类的。*/

//成员函数可以在类外部定义,但必须加上“类名::”
{
month =a;
year=b;
day=c;
//一个类的所有成员位于这个类的作用域内,一个类的任何成员都可访问本类的任何其它成员。
}
};

当在外部声明类的成员函数时,类名必须加在函数名之前,不在返回类型之前。

class Date
{······};
void Date::set(int a, int b, int c)
{
month=a;
year=b;
day=c;
}

成员函数可以重载,如果两个类有成员函数同名就不是重载。

数据成员的隐藏:

#include<iostream>
using namespace std;
class test//类可以在函数中定义(局部类),作用域在函数块中。
//局部类的成员函数必须在类内部定义。
{
    
    public:
    void a()
    {
        m=2;
    }
    void b()
    {
        int m=3;
    }
    int m=1;
};
int main()
{
    test x;
    cout<<x.m<<endl;    //输出1
    x.b();   //函数中定义了同名的局部作用域变量,把m隐藏了
    cout<<x.m<<endl;    //输出1
    x.a();
    cout<<x.m<<endl;    //输出2
}

类名遮挡:类名允许与其他变量名或函数名相同。 

类名、变量名、函数名被后面定义的遮挡

//类名被遮挡,可以在类名前加“class”

//非类型名被遮挡,可在非类型名前加“::“

结构

结构是用户自定义的新数据类型,结构中的数据变量成为该结构的数据成员。

声明结构:在c++中,结构是用struct 声明的类,默认是public

struct student
{
int id;
string name;
float weight;
};  //注意“;"

声明结构不分配内存,内存分配发生在定义这个新数据类型的变量中。在C中不可有成员函数,而在C++中可以有。

结构成员的访问:用结构名+点操作符"."(也称结构成员操作符)来访问结构中的成员。或者结构指针+  ”->"。

结构赋值:不同结构名的变量之间不可赋值,即使二者包含相同的数据成员。结构比较大时,用引用或指针传递可以节省时间和空间。

构造函数

c++中与类同名的成员函数是构造函数,在类的对象创建时自动被调用

class test
{
    int *a=new int;
    public:
    test()//构造函数无返回类型;无参数的构造函数称为默认构造函数
/*可以通过构造函数设定数据成员默认值*/
    {
        *a=2;
        return; //不能返回值,但可以有无值返回语句return。
    }
    ~test()    //析构函数,在构造函数名前加”~“
    {
        delete a;
    }
//当主函数运行到}结束时,析构函数被调用,最后创建的对象最先调用

};

 C++中每个类必须有构造函数,若没有声明构造函数,则c++提供一个没有参数的默认构造函数,仅负责创建对象空间。

类定义是不分配空间和初始化的,类的定义中不能创建对象

class object1
{
    int a;
};
class object2
{
    object1 b(1);//”错误“这是创建对象语句,不是类定义中允许的声明数据成员形式
                 /*类的定义不调用构造函数*/
    object1 b;   //正确  类成员
};

类成员: 若类中有其他类成员,构造函数冒号后面可以表示对数据成员构造函数调用

#include<iostream>
using namespace std;
class class1
{
    public:
    int a;
        class1(int b)
        {
            a=b;
        }
};
class class2
{
    public:
    class1 obj;
    class2(int num):obj(num)//如果是:obj(),则可以省略。
    {}      //必须有{}
};
int main()
{
    class2 t(66);
    cout<<t.obj.a<<endl;  //输出66
}

标签:函数,第一周,int,成员,OOP1,class,类名,构造函数
来源: https://blog.csdn.net/qq_39853122/article/details/120380565

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有