设计不能被拷贝的类

  • C++98的解决方法

    • 将类成员函数设计成私有(防止重载)

    • 只有声明没有定义(操作了也什么也不做)

  • C++11 解决方法

    C++ 拓展delete 的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上 = delete;表示让编译器删除默认成员函数

设计一个类只能在堆上创建对象

实现方法:

将该类的构造函数设置为私有 ,构造声明为私有。防止被人调用拷贝在栈上生存对象。

提供一个 静态的成员函数,在该静态的成员函数中完成堆对象的创建

设计一个类只能在栈上创建对象同上 设计 静态方法对象 创建对象返回即可

设计一个类 不可以被继承

  • C++98

将构造函数私有化派生类中找不到积基类的构造函数 则无法被继承

  • C++11 使用final 关键字

class A final
{
    
}

设计一个类只能创建一个对象(单例模式)

设计模式

一个类只能创建一个对象,即单例模式.该模式可以保证系统中该类只有一个实例,并提供一个 访问它的全局访问点,该实例被所有程序模块共享

饿汉模式(Eager Initialization)

  • 在这种方式中,单例对象在类被加载时就创建了,通常是在类初始化阶段。这意味着不管这个对象是否被使用,它都会被创建,因此被称为“饿汉”。

  • 优点是实现简单,线程安全,因为实例是在类加载时创建的,不存在多线程同时创建实例的问题。

  • 缺点是不管是否需要这个实例,它都会被创建,可能会占用资源。

懒汉模式(Lazy Initialization)

  • 在这种方式中,单例对象在第一次被需要时才创建。这种方式称为“懒汉”,因为它“懒”得在程序启动时就创建对象,而是等到真正需要时才创建。

  • 优点是只有在需要时才创建对象,节省资源,特别是当对象的创建成本较高时。

  • 缺点是如果不正确地处理线程安全问题,可能会导致多个线程同时创建多个实例。为了解决这个问题,通常需要使用同步机制,如synchronized关键字或者ReentrantLock

C++中的类型转换

在C语言中 如果赋值运算符左右类型不同,或者形参与实参;类型不匹配,或者返回值类型与接收值类型不一样的时候,就需要发生类型转化

  • 隐式转换

    编译器自己转换 失败就编译失败

  • 显示转换

    使用强制转换符(int) 进行强制转换

C++完全兼容C语言,但是C++更加复杂提供了更为标准的类型转换

C++中的4中类型转化分别为

  • static_cast 静态类型转换

    将float转换成int 向上转换

    派生类指针转换成基类指针

    用于将多态类型转换成非多态类型

    double d = 12.34;

    int a = static_cast(d);

  • reinterprt_cast 重新解释型类型转换

    为操作数的位模式提供较低层次的重新解释

    底层指针之间的转换 ,用于将一种类型转换 为另一种不同的类型

  • const_cast 常量类型转换

    使用const_cast来去除const属性

  • dynamic_cast 动态类型转换

    类类型层次的向下转换,从基类指针或转为派生类指针或引用,转换在运行时检查确保转换的安全 转换失败返回nullptr

    dynamic_cast只能用于父类含有虚函数的类