CPP较难理解的几个部分是什么

发布时间:2022-01-04 18:23:18 作者:柒染
来源:亿速云 阅读:132

今天就跟大家聊聊有关CPP较难理解的几个部分是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

继承:

分为公有继承,私有继承,保护继承。

1.公有继承(public)

特点是基类的公有成员和保护成员作为派生类成员时保持原状,而基类的私有成员仍然私有,无法被派生类的子类访问。

如:

class room

{

public:

int a1 = 50;

private:

int b1 = 70;

};

class bed : public room

{

public:

int c1 = a1;

        int c2 = b1;//报错

};

2.私有继承(private)

私有继承的特点是,基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类访问。基类的私有成员依然不可访问

如:

class desk : private room

{

public:

int f = a1;//正确

        int g = b1;//错误,基类的私有成员依然不可访问

};

class chair : public desk

{

public:

int c = a1;//报错 不可访问,故不能被派生类的子类访问

};

3.保护继承(protected):

保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员、友元访问。基类的私有成员仍然是私有的。

这里介绍一下友元:

友元函数:friend <类型><友元函数名>(<参数表>); 

友元类: friend class <友元类名>;  

友元无继承性。

多态:这是C++面向对象的核心概念,主要通过虚函数 virtual 实现,虚函数允许子类重新定义成员函数中的父类虚函数(见下面虚函数那个例子),这称为覆盖或者重写(注意不叫重载)。

重载:重载是多个函数重名,但参数名称或者类型一种(两种)不同,编译器根据这些参数自动生成一些不同名的预处理函数。

多态和重载的实质区别在于函数地址是否在运行前确定。由于重载需要编译器生成一些不同名的预处理函数,所以它是在运行后才能确定函数地址。

虚函数:即virtual,没有虚函数也就没有多态,可见其重要性。虚函数使得父类对象的指针可以调用子类的函数。如果不是虚函数,父类是不能调用子类的。C++中多态的实现只在通过基类指针调用虚函数时才会实现。

class animal
{
       virtual  void breathe() //注意这是虑函数
       {
              cout<<"animal breathe"<<endl;
       }
};

class fish:public animal
{
void breathe()
{
     cout<<"fish bubble"<<endl;
}
};

class cat:public animal
{
void breathe()
{
     cout<<"cat bubble"<<endl;
}
};


void main()
{
animal* pAn;
switch(用户选择)
{
case fish:
pAn = new fish;
break;
case cat:
pAn = new cat;
break;
}
pAn->breathe();
delete pAn;
}
}

当用户选鱼时输出:fish breathe
当用户选猫时输出:cat breathe
如果没有使用虚函数的话(将基类的breathe函数virtual申明除掉),即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。那么不管你怎么选都是输出:animal breathe.


构造函数:初始化对象的数据成员。

如:

class room

{

public:

room(int _a)//构造函数

    {

        b1 = _a;//初始化对象的数据成员

    }

private:

int b1;

};

可以简写成 room(int _a):b1(_a){}

 例如:room c1(22); 编译系统为对象c1的数据成员(b1)分配内存空间,并调用构造函数room()自动地初始化对象c1的b1值设置为22.

析构函数:与构造函数刚好相反,析构函数是在对象被撤销时被自动调用,用于对成员撤销时的一些清理工作。

特点:

1.析构函数名与类名的差别只在一个~,即在类名前加个波浪线。

2.析构函数只能有一个,没有返回类型, 也不能指定参数,不能被重载

3.析构函数可以随时被调用,用于释放对象的动态内存

如前面的:

class room

{

public:

room(int _a):b1(_a){}

        ~room(){}

}

const 修饰指针:

如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;

如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

看完上述内容,你们对CPP较难理解的几个部分是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. cpp命名空间
  2. jvm的内存结构主要包含哪几个部分

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cpp

上一篇:PEiD如何查看某个EXE文件是什么语言写的

下一篇:windows中如何把文件隐藏到另外个文件里

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》