首页 > 编程语言 >002:C++类和对象

002:C++类和对象

时间:2023-02-12 17:56:08浏览次数:50  
标签:友元 函数 访问 对象 成员 C++ 002 静态 构造函数

1:**** 范围解析运算符 ::

    类的内部声明函数是内敛函数(inline),

    类的外边定义函数,需要在方法名字前面使用类名和范围解析运算费::

    调用函数使用.

 

    ::作用域运算符,主要有以下三个使用场景。

        全局作用域符

using namespace std;

             float a=13.5;

             int main() {

                 int a=5;

                 cout<<a<<endl;//输出局部变量a的值

                 cout<<::a<<endl;//输出全局变量a的值

             }

             // 运行结果为5     13.5

 

        命名空间作用域符

            std::cout

        类作用域符

 

 2:**** 类访问修饰符

    2.1: 公有(public)成员

        公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值,

    2.2:私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。

        默认情况下,类的所有成员都是私有的。派生类无法访问。

    2.3:protected(受保护)成员

        protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。

 

 3: **** 继承中的特点

     3.1:有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

         1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private

         2.protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private

         3.private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private

    3.2:但无论哪种继承方式,上面两点都没有改变:

         1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;

         2.protected 成员可以被派生类访问。

 

 4: 构造函数和析构函数

    4.1:类的构造函数

         类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

         构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

    

Line::Line(void)

         {

             cout << "Object is being created" << endl;

         }

    4.2:带参数的构造函数

        默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值

         // 成员函数定义,包括构造函数

Line::Line( double len)

         {

             cout << "Object is being created, length = " << len << endl;

             length = len;

         }

    4.3:使用初始化列表来初始化字段

     使用初始化列表来初始化字段:

Line::Line( double len): length(len)

     {

         cout << "Object is being created, length = " << len << endl;

     }

     C::C( double a, double b, double c): X(a), Y(b), Z(c)

     {

       ....

     }

 

    4.4:类的析构函数

         类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

         析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

 

 5:拷贝构造函数是一种特殊的构造函数, const

    它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。

    拷贝构造函数通常用于:

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

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

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

     如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:

 classname (const classname &obj) {

        // 构造函数的主体

}

 

 6:C++ 友元函数 friend

    友元函数不是类的成员函数,但是可以访问所有的共有变量,保护变量,私有变量。

         C++ 类 & 对象 C++ 类 & 对象

         类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

         友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

         如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,

 

 7: C++内联函数 inline

    在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。

 

     是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。

     对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。

     如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。

 

 8:在 C++ 中,隐藏函数this指针

     每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

     友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

     下面的实例有助于更好地理解 this 指针的概念:

 

 9:指针成员访问运算符->

    一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。

 

 10:C++ 类的静态变量

    我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。

 

 11:静态成员函数

     如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。

     静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

     静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。

     静态成员函数与普通成员函数的区别:

     静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

     普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。

标签:友元,函数,访问,对象,成员,C++,002,静态,构造函数
From: https://www.cnblogs.com/zyzmlc/p/17114343.html

相关文章

  • C++右值引用与移动语义
    一文看懂C++右值引用和移动语义目录背景什么是右值引用为什么需要右值引用移动构造move的原理move的应用场景右值引用注意事项总结背景C++11......
  • C++中static关键字的作用
    static是什么在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:成员变量,成员函数,普通函数,局部变......
  • 通过 Resource 限制命名空间对象创建数量和计算资源使用
    ResourceQuotas简单介绍在k8s中,容器、Pod级别的的计算资源约束设置,可以通过定义yaml文件时的limits和requests字段来做限制,通过配置不同的Limits和requests......
  • 对象模型
    对象模型在C语言中,数据和处理数据的操作(函数)是分开的。也就是说,C语言本身没有支持数据和函数之间的关联性。C++用类描述抽象数据类型(abstractdatatype,ADT),在类中定义了......
  • 5_Java对象
    面向对象编程对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。面......
  • C++ | 引用
    01.引用概述1.1创建引用变量引用是已定义的变量的别名(另一个名称)。inta;int&b=a;//将b作为a变量的别名C和C++使用&符号来指示变量的地址。C++给&符号赋予了另......
  • Gson_Java对象转为json对象
    在对客户端进行相应的时候,要把一个JavaBean对象发送给浏览器,最好是转为json对象。   一、导入jar包  二、使用例子:把一个集合对象以json的格式响应给......
  • 【数据结构与算法】图论算法(C++实现)
    一些基本概念图一个图\(G=(V,E)\)由顶点集V和边集E组成。每一条边就是一副顶点对\((u,v)\),其中\(u,v\inV\)。顶点u和顶点v邻接当且仅当\((u,v)\inE\)......
  • 类和对象概述
    面向过程与面向对象区别、类和对象的概念、对象的创建和使用,对象的内存解析的简要介绍。Author:MsuenbDate:2023-02-07面向过程与面向对象面向过程和面向对象都是......
  • C/C++工业数据分析与文件信息管理系统[2023-02-12]
    C/C++工业数据分析与文件信息管理系统[2023-02-12]程序设计基础A课程设计工业数据分析与文件信息管理系统题目背景智能制造是以工业生产数据分析、自动化技术为基础,具......