0
点赞
收藏
分享

微信扫一扫

双系统:windows mbr安装ubuntu

桑二小姐 2023-06-05 阅读 93

C++面向对象

一、类和对象

 从类中实例化对象分两种方法,一种是从栈中实例化对象一种是从堆中实例化对象。

 下面以自定义狗类介绍如何自定义类和如何使用对象。

#include <iostream>
#include <string.h>

using namespace std;

class Dog    //创建一个类
{
public:  //访问限定符 public(公有的),此外还有 private(私有的)和 protected(受保护的)。
         //写这个的目的是为了下面我们要调用这些成员,不写访问限定符默认是 private。简单的来说,访 
         //问限定符就是设置一个成员变量和成员函数的访问权限而已
    string name;   //string 是 C++的数据类型,方便好用,使用频率相当高。
    int age;

    void run()
    {
        cout << "小狗的名字是:" <<name<<","<<"年龄是"<<age<<endl;
    }

};


int main(int argc, char const *argv[])
{
    Dog dog1;   //从栈中实例化一个对象

    dog1.name = "旺财";
    dog1.age = 2;
    dog1.run();

    Dog *dog2 = new Dog();  //从堆中实例化一个对象
    
    if (dog2 == NULL)
    {
       return 0;
    }
    
    dog2->name = "富贵";
    dog2->age = 1;
    dog2->run();

    delete dog2;   //删除从堆空间申请的内存
    dog2 = NULL;
    
    return 0;
}

编译完成后执行的结果如下。

 

二、构造函数与析构函数

什么是构造函数?

 构造函数的特点如下:

(1) 构造函数必须与类名同名;

(2) 可以重载,(重载?新概念,后面学到什么是重载。);

(3) 没有返回类型,即使是 void 也不行。

 什么是析构函数?

 析构函数的特点如下:

(1) 析构函数的格式为~类名();

(2) 调用时释放内存(资源);

(3) ~类名()不能加参数;

  (4) 没有返回值,即使是 void 也不行。

通过简单的例子来说明构造函数和析构函数的使用

#include <iostream>
#include <string.h>

using namespace std;

class Dog
{
public:
   Dog();     //构造函数
   ~Dog();    //析构函数

};

int main(int argc, char const *argv[])
{
    Dog dog;
    cout<<"构造与析构函数示例"<<endl;
    return 0;
}

Dog::Dog()
{
    cout<<"构造函数执行!"<<endl;
}

Dog::~Dog()
{
    cout<<"析构函数执行!"<<endl;
}

编译完成后执行的结果如下。

 

三、 this 指针

一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么 成员函数如何知道要访问哪个对象的数据成员呢?

 关于类的 this 指针有以下特点:

  • (1) this 只能在成员函数中使用,全局函数、静态函数都不能使用 this。实际上,成员函数 默认第一个参数为 T * const this。也就是一个类里面的成员了函数 int func(int p),func 的原 型在编译器看来应该是 int func(T * const this,int p)。
  • (2) this 在成员函数的开始前构造,在成员函数的结束后清除。
  • (3) this 指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全 局变量。

下面以简单的例子来说明 this 的用法。我们还是以狗类为例,按上面的 this 解释,this 只 能够在成员函数使用,并可以指向自身数据。

#include <iostream>
#include <string.h>

using namespace std;

class Dog
{
public:
    string name;
    void func();
};


int main(int argc, char const *argv[])
{
    Dog dog;
    dog.func();

    return 0;
}

void Dog::func()
{
    this->name = "旺财";
    cout<<"小狗的名字叫:"<<this->name<<endl;
}

程序执行的结果如下。

 

举报

相关推荐

0 条评论