002:C++类和对象

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 指针。

posted on 2023-02-12 17:48  风zk  阅读(16)  评论(0编辑  收藏  举报

导航