首页 > 其他分享 >构造函数私有化或保护化

构造函数私有化或保护化

时间:2023-04-24 11:33:58浏览次数:48  
标签:函数 int 私有化 保护 animal 构造函数 public cout

构造函数私有化或保护化

摘自: https://blog.csdn.net/caoyangxiaoyao/article/details/81184786

  1. 构造函数私有化/保护化

可以将构造函数设置为私有函数,但是这样做就无法从外部直接调用构造函数,因此就无法直接构造这个类的对象。

1.如果你不想让外面的用户直接构造一个类(类A)的对象,而是希望用户只能构造这个类A的子类,那么就可以将类A的构造函数/析构函数声明为protected,而将类A的子类的构造函数/析构函数声明为public。如:

#include <iostream>

using namespace std;

class A

{

protected:

A(){}

public:

void test(){

cout << "call A test()" << endl;

}

};

class B : public A

{

public: B(){}

};

int main(int argc, char** argv)

{

A a; // error

B b; // ok

b.test();

}

2. 如果将构造函数/析构函数声明为private,那只能这个类的“内部”函数来构造这个类的对象了,但是,由于必须有一个对象被构造出来才能调用这个内部函数,内部函数才能调用私有的构造函数,因此我们将这个内部函数设置为静态函数,这样就不需要通过对象,而可以通过类直接调用。如下:

#include <iostream>

using namespace std;

class A

{

private:

A():data(10){ cout << "A" << endl; }

~A(){ cout << "~A" << endl; }

public:

static A& Instance()

{

static A a;

return a;

}

void Print()

{

cout << data << endl;

}

private:

int data;

};

int main(int argc, char** argv)

{

A& ra = A::Instance();

ra.Print();

}

3.通常将拷贝构造函数和operator=(赋值操作符重载)声明为private,但是没有实现体。这个目的是禁止一个类的外部用户对这个类的对象进行复制动作。

二、构造函数继承与重写

基类的构造函数不能被子类继承,但是子类可以直接调用,当然子类也无法重写父类的构造函数。

#include <iostream>

using namespace std;

class animal

{

public:

animal(int height, int weight)

{

cout << "animal construct--" << height<<":"<<weight<<endl;

}

animal()

{

cout << "animal construct" << endl;

}

};

class fish :public animal

{

public:

fish() :animal(100,200)

{

cout << "fish construct" << endl;

}

};

void main()

{

fish fh;

system("pause");

}

三、构造函数能否为虚函数

不能。构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数。通常析构函数才会用virtual修饰。

标签:函数,int,私有化,保护,animal,构造函数,public,cout
From: https://www.cnblogs.com/zeliangzhang/p/17348922.html

相关文章

  • 为什么医疗保健需要MFT来帮助保护EHR文件传输
    毫无疑问,医疗保健行业需要EHR技术来处理患者,设施,提供者等之间的敏感患者信息。但是,如果没有安全的MFT解决方案,您将无法安全地传输患者文件,从而使您的运营面临遭受数据泄露,尴尬,声誉损失以及随之而来的高昂损失的风险。在任何给定的软件领域,各种解决方案可能“看起来”像它们提供......
  • 什么是等保(信息安全等级保护)?
    什么是等保(信息安全等级保护)?一、什么是等保?“等保”,即信息安全等级保护,是我国网络安全领域的基本国策、基本制度。早在2017年8月,公安部评估中心就根据网信办和信安标委的意见将等级保护在编的5个基本要求分册标准进行了合并形成《信息安全技术网络安全等级保护基本要求》一个标......
  • 在Ubuntu 22.04上使用Fail2Ban保护SSH
    一、安装Fail2bansudoaptupdatesudoaptinstallfail2ban 二、进行配置fail2ban服务将其配置文件保存在/etc/fail2ban目录中。有一个默认值为jail.conf的文件,但是建议不要直接修改次文件创建jail.local文件,并进行设置sudocpjail.confjail.local#复制jail.conf进行......
  • 安科瑞电动机保护器的功能特点及应用
    安科瑞虞佳豪产品概述安科瑞ARD3M适用于额定电压至660V的低压电动机回路,集保护、测量、控制、通讯、运维于一体。其完善的保护功能确保电动机安全运行,带有逻辑可编程功能,可以满足多种控制方式。可选配不同通讯模块适应现场通讯需求。该产品采用分体式结构,由主体、显示单元、互感......
  • 如何解决ChatGPT 的数据保护盲点
    自成立以来的短时间内,ChatGPT和其他生成式AI平台理所当然地赢得了终极生产力助推器的声誉。然而,能够按需快速生成高质量文本的技术,可能同时暴露敏感的公司数据。最近发生的一件事,其中东方联盟网络安全研究人员将专有代码粘贴到ChatGPT中,清楚地表明该工具很容易成为潜在的数......
  • C#基础 readonly 构造函数初始化readonly字段
     .NETFramework:4.7.2       IDE:VisualStudioCommunity2019        OS:Windows10x64    typesetting:Markdown 基础代码codeusingSystem;namespaceConsoleApp{classMyClass{privatereadonlystringstr;pu......
  • 如何修复 SD 卡写保护错误,导致无法格式化 SD 卡 All In One
    如何修复SD卡写保护错误,导致无法格式化SD卡AllInOneErrorpartitioning:Error:-69830:ThisoperationrequiresanunmounteddiskerrormacOS显示SD卡状态❌solutionSD卡,写保护开关损坏了更换一个新的SD卡Adapte外壳就可以了✅原因分析:原来的A......
  • 防患于未然,华为云数据灾备解决方案保护企业数据安全
    失去服务能力、影响业务,而不论是电力中断、网络故障、硬件故障,还是人为操作失误或恶意破坏,以及自然灾害等都有可能导致这一“灾难”的发生,所以为了保证数据库稳定运行、损失降到最低,提前进行容灾备份是十分有必要的。 你可能会问,什么是容灾?什么又是备灾?事实上,容灾指的是当灾害发生......
  • 驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内......
  • 驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内......