首页 > 其他分享 >101.final和override关键字

101.final和override关键字

时间:2023-07-04 13:00:44浏览次数:38  
标签:name int 修饰 Shape override 101 final 构造函数

在C++中,final是一个关键字,用于修饰类的成员变量和成员函数。

1.final修饰成员变量:当一个类中的成员变量被声明为final时,它就变成了常量,即它的值不能再被修改。final修饰的成员变量必须在类定义中进行初始化,且只能初始化一次。

假设我们有一个名为Person的类,其中包含一个成员变量name,我们想将其声明为final:

class Person
{
public:
    final string name; // 将name声明为final 
    Person(string n) : name(n) {} // 初始化name
};

现在,我们可以创建一个Person对象并初始化其name属性:

int main()
{
    Person p("Alice"); // 正确使用final修饰的成员变量
    p.name = "Bob"; // 错误:无法修改final修饰的成员变量
    return 0;
}

在这个例子中,我们将name变量声明为final,这意味着它不能被修改。当我们尝试将其值更改为"Bob"时,编译器会报错,因为这是不允许的。只有在类定义中进行初始化后,我们才能访问和修改name变量的值。

2.final修饰成员函数:当一个类中的成员函数被声明为final时,它就变成了不可调用的虚函数,即它的指针不能被指向派生类的函数重载覆盖。final修饰的成员函数必须在类定义中进行声明,且只能声明一次。

class MyClass 
{
public:
    void foo() const final; // foo是final修饰的成员函数
};

class MyDerivedClass : public MyClass 
{
public:
    void foo() const override final; // error: cannot override 'const' final function 'MyClass::foo() const'
};

3.final修饰构造函数:当一个类中的构造函数被声明为final时,它就变成了不可调用的构造函数,即它的指针不能被指向派生类的构造函数重载覆盖。final修饰的构造函数必须在类定义中进行声明,且只能声明一次。

假设我们有一个名为Shape的类,其中包含一个构造函数:

class Shape 
{
public:
    Shape() {} // 定义了一个默认构造函数
    
    Shape(int x, int y) { // 定义了一个带参数的构造函数
        width = x;
        height = y;
    }
    
    int getWidth() const { return width; }
    int getHeight() const { return height; }
private:
    int width, height;
};

现在,我们想将其中一个构造函数声明为final:

class Shape 
{
public:
    final Shape(int x, int y); // 将带参数的构造函数声明为final
    
    Shape() {} // 定义了一个默认构造函数
    
    Shape(int w, int h) : width(w), height(h) {} // 定义了一个新构造函数,用于覆盖final修饰的构造函数
    
    int getWidth() const { return width; }
    int getHeight() const { return height; }
private:
    int width, height;
};

现在,我们可以创建一个Shape对象并调用它的构造函数:

int main()
{
    Shape shape1(10, 20); // 调用默认构造函数或新构造函数都可以,因为final修饰的构造函数不可调用
    int w1 = shape1.getWidth(); // 可以访问width属性,因为它没有被覆盖
    int h1 = shape1.getHeight(); // 可以访问height属性,因为它没有被覆盖
    
    Shape shape2(30, 40); // 此时编译器会报错,因为无法调用带有参数的final修饰的构造函数
    int w2 = shape2.getWidth(); // 不能访问width属性,因为它已被覆盖为新构造函数
    int h2 = shape2.getHeight(); // 不能访问height属性,因为它已被覆盖为新构造函数
    
    return 0;
}

标签:name,int,修饰,Shape,override,101,final,构造函数
From: https://www.cnblogs.com/codemagiciant/p/17525482.html

相关文章

  • Variable 'xxxx' is accessed from within inner class, needs to be final or effect
    问题的原因问题代码:publicstaticvoidmain(String[]args){Integersum=0;Integercount=0;List<Integer>list=newArrayList<>(Arrays.asList(1,2,3,4,5));list.stream().forEach(e->{sum+=e;//这步会编译错误--Varia......
  • 27.final和override关键字
    在C++中,final是一个关键字,用于修饰类的成员变量和成员函数。1.final修饰成员变量:当一个类中的成员变量被声明为final时,它就变成了常量,即它的值不能再被修改。final修饰的成员变量必须在类定义中进行初始化,且只能初始化一次。假设我们有一个名为Person的类,其中包含一个成员变量na......
  • classfinal加密java代码并且启动
    maven插件方式配置参数解释: 参数说明-file加密的jar/war完整路径-packages加密的包名(可为空,多个用","分割)-libjarsjar/war包lib下要加密jar文件名(可为空,多个用","分割)-cfgfiles需要加密的配置文件,一般是classes目录下的yml或propertie......
  • finalshell连接超时的解决方法
    CentOS图形管理中的NetworkManager接管了网络配置,可以尝试执行以下命令恢复:systemctlstopNetworkManager临时关闭systemctldisableNetworkManager永久关闭网络管理命令systemctlstartnetwork.service开启网络服务然后在本机中再次使用ping命令,发现可以ping通虚拟机ip,这时......
  • 1010. 拦截导弹
    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。......
  • 1012. 友好城市
    Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免......
  • mybatics之prefixOverrides
    1.<trimprefix=""suffix=""suffixOverrides=""prefixOverrides=""></trim>prefix:在trim标签内sql语句加上前缀。suffix:在trim标签内sql语句加上后缀。suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句......
  • C++面试八股文:override和finial关键字有什么作用?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第22面:(二师兄好苦逼,节假日还在面试。。。)面试官:C++的继承了解吗?二师兄:(不好意思,你面到我的强项了。。)了解一些。面试官:什么是虚函数,为什么需要虚函数?二师兄:虚函数允许在基类中定义一个函数,然后在派生类中进行重写(override)。二......
  • Games101-Cp4-Geometry
    几何表示方法隐式表达对应通过隐函数表示点的相对位置,而不是空间的具体位置。具体有:代数公式、水平集、分形/自相似(fractals)、CSG(constructivesolidgeometry):通过简单几何体的布尔运算获得复杂的几何体、距离函数:指的是到几何体点的最小距离,当两个几何体的点近,通过融合距离函......
  • 在finally中出现return会发生什么?
    目录看点:面试题:看点:当Java程序执行try块、catch块时遇到了return或throw语句,这两个语句都会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块,程序立即执行return或throw语句,方法终止;如果有finally块,系......