当前位置: 首页 > news >正文

攀枝花网站开发/免费建站系统哪个好用吗

攀枝花网站开发,免费建站系统哪个好用吗,做国内电影网站赚钱不,wordpress怎么用Redis正确的说法是基类的普通成员函数可以被继承,可以通过派生类的对象访问,类的构造函数、析构函数不能被继承。而我的理解是构造函数被继承了,但它们的名字和派生类的名字是不一样的,不能成为派生类的构造函数,因此我们就…

                    正确的说法是基类的普通成员函数可以被继承,可以通过派生类的对象访问,类的构造函数、析构函数不能被继承。而我的理解是构造函数被继承了,但它们的名字和派生类的名字是不一样的,不能成为派生类的构造函数,因此我们就要进行显示的调用基类的构造函数对基类继承过来的数据进行初始化。

        派生类也是类,那么它的初始化也是调用构造函数来初始化,这时我们就可以定义派生类的构造函数,在里面添加对基类构造函数调用,这样我们就能够对派生类自己添加的数据成员进行初始化的同时,也能对有基类继承过来的数据成员进行初始化,即能对派生类的所有数据进行初始化了。

        如下面的例子 

  • #include <iostream>
    using namespace std;
    class A {
    public:
        A(int a = 0) :x(a) { }//构造函数

        void s() { cout << "x=" << x  << endl; }


    private:

        int x;
    };
    class D :public A {
    public:
        D(int a = 0, int b = 0) :A(a), z(b) { }//A(a)调用的是A类的A()这个构造函数,若基类有默认构造函数(有默认参数的构造函数或无参数的构造函数)也可不用显式调用,系统将自动调用基类的默认构造函数,即  D(int a = 0, int b = 0) :z(b) { } 当然如果没有默认构造函数,还不显式调用,那么将编译失败 ,注意类中已经显式定义了构造函数,编译器不会再生成默认的构造函数。

        void get() {
             s();
            cout << "z=" << z << endl;
        }

    private:

        int z;
    };
    int main()
    {
        A b(4); D c(5, 6);
        cout << "A类"; b.s();
        cout << "D类"<<endl;
        c.get();
        return EXIT_SUCCESS;

    }

运行结果为:

A类x=4

D类

x=5

z=6

        请注意派生类定义的这一行D(int a = 0, int b = 0) :A(a), z(b) { }调用基类构造函数只能在派生类的参数初始化列表,它们之间以逗号隔开。如

派生类名(形式参数列表) : 基类名1(基类构造函数实参列表),基类名2(基类构造函数实参列表),派生类初始化列
{
派生类初始化函数体
}
另外在派生类中我们可能定义的别的类的对象(以下称为子对象),因此要加上子对象的初始化(当然如有默认构造函数也可不显式调用),如
派生类名(形式参数列表) : 基类名1(基类构造函数实参列表),基类名2(基类构造函数实参列表),子对象名1(子对象构造函数实参列表),子对象名2(子对象构造函数实参列表),派生类初始化列
{
派生类初始化函数体
}

构造函数的调用顺序

调用顺序为:
在单继承中
①调用基类构造函数;构造函数的调用顺序是按照继承的层次自顶向下、从基类再到派生类的。
例如
                若继承关系只有两层(A类作为基类,B类是以A类为基类的派生类),若以B类创建一个对象,那此对象先执行A类的构造函数,在执行B类的构造函数;若继承关系有三层(A->B->C),同样的,那就先执行A类的构造函数,在执行B类的构造函数,最后执行C类的构造函数。
调用子对象构造函数;多个子对象时按其在类中定义的次序先后调用;
执行派生类初始化列表;
执行派生类初始化函数体;
在多继承中
调用基类构造函数;多个基类构造函数按基类在派生类继承时的声明的次序先后调用(即谁先声明谁就先调用)
调用子对象构造函数;多个子对象时按其在类中定义的次序先后调用;
执行派生类初始化列表;
执行派生类初始化函数体;
注意:基类构造函数、子对象名在派生类构造函数的初始化列表中的顺序是可以任意的,但还是按调用顺序写比较好,增加可读性。
在继承中若有多种继承关系,且其中是基类都为一般基类 ,例如(A->B->C)

#include<iostream>
using namespace std;
class A {
public:A(int a) :x(a)
{
    cout << "A" << endl;
}
      void getx(){ cout << "x=" <<x<< endl;
      }


private:

    int x;
};
class B :public A {
public:B(int a) :A(a)
{
    cout << "B" << endl;

}

};
class C :public B {
public:C(int s) :B(s){
    cout << "C" << endl;
    getx();
}

};
int main()
{
    C a(6);
}

结果为

A
B
C
x=6

注意在以上例子中的

public:C(int s) :B(s)
{
    cout << "C" << endl;
    getx();
}

//在这时不用显式的调用A的构造函数,因为在调用B类构造函数时,以隐式调用(因为你再显式调用,那将执行两次A类的构造函数,这将浪费资源),就算你显式调用A的构造函数,那程序也将出错,即C++ 禁止在 C 中显式地调用 A 的构造函数。

在继承中若有多种继承关系,且其中是基类有为虚基类 ,例如(A->B->C,A为虚基类)

#include<iostream>
using namespace std;
class A {
    int s;
public:
    int gets() { return s; }
    A(int a) :s(a)
    {
        cout << "A" << endl;
    }
    
};
class B : virtual public A {
public:    B(int a) :A(a)
{
    cout << "B" << endl;

}
};
class C : virtual public A {
public:
    C(int a) :A(a)
    {
        cout << "C" << endl;
    }
    
};
class D :public B, public C {
public:D(int a, int b) :A(a), B(b), C(b)//假设B、C类中的构造函数会执行A的构造函数(没被忽略),那A的构造函数将执行三次,那么变量s的值应为b的值,若s不为b的值,那假设不成立
{

    cout << "D" << endl;
    cout << gets() << endl;

}
      
};
int main()
{
    D a(1, 2);

    return 0;

}

运行结果为

A
B
C
D
1//s不为b的值,假设不成立,说明B、C类中的构造函数A的构造函数被忽略

在以上例子中的

public:D(int a, int b) :A(a), B(b), C(b)
{
    cout << "D" << endl;
    cout << gets() << endl;

}
在这时就要显式的调用A的构造函数,   B、C的构造函数中A的构造函数被忽略,保证A类构造函数只执行一次。

原因(个人看法):如果去掉在原来的代码中的"A(a)",如

public:D(int a, int b) :B(b), C(b)
{
    cout << "D" << endl;
    cout << gets() << endl;

}

那B、C类中的构造函数都会执行A的构造函数,即将执行两次A的构造函数,那么这将浪费资源,如果继承关系更多的话(A->B->C->D->E),那将执行更多次A类的构造函数,那将更浪费资源。

补充

以下是虚基类初始化的定义:

如果在虚基类中定义了带参数的构造函数,而且没有定义默认构造 函数,则在其所有派生类(包直接派生和间接派生)中,都要通过 构造函数的初始化表对虚基类进行初始化,但只有用于建立派生类对象的那个派生类的构造函数才会执行虚基类的构造函数,其他继承来的非虚基类初始化类表中的虚基类构造函数将被忽略。
如有错误,请指出。
如有侵权,请联系删除。
http://www.jmfq.cn/news/5035861.html

相关文章:

  • 新品发布会的目的和意义/宁波抖音seo搜索优化软件
  • asp.net网站备份/网络营销相关的岗位有哪些
  • 可不可以用帝国cms做企业网站/seo咨询河北
  • 易语言怎么做点击按钮打开网站/seo主要做什么工作内容
  • 自己做的网站给人攻击了怎么办/南京做网站的公司
  • 织梦系统网站搭建教程/sem优化怎么做
  • 厦门 外贸商城网站制作/seo云优化软件
  • 建设海外网站/互联网优化是什么意思
  • vip解析网站怎么做的/推广网站要注意什么
  • 个人建站的app哪里有卖/网络广告营销经典案例
  • 大连开发区网站/百度爱采购官网首页
  • 福建省建设人才与科技发展中心网站首页/百度广告联盟怎么加入
  • 唐卡装饰集团 一站式超级体验店/网站开发的一般流程
  • 成都企业网站优化/seo观察网
  • 江油网站建设制作策划哪家专业/引流推广营销
  • 家里电脑做网站/色盲和色弱的区别
  • 呼和浩特网站seo/最新足球赛事
  • app下载官方网站/提升seo搜索排名
  • 服饰工厂网站建设/百度指数怎么用
  • 初中作文网/北京seo包年
  • 域名有了怎么做网站/草莓永久地域网名入2022
  • python 微信网站开发/cfa三级和一二级关系大吗
  • 北京企业网站建设公司/世界足球世界排名
  • 直邮网站的推广活动怎么做/google seo是什么意思
  • 网站建设规划ppt/大数据技术主要学什么
  • 网站内链结构是什么/百度导航最新版本
  • 简单个人网站制作教程/电商中seo是什么意思
  • 建设微网站的特色/网络热词作文
  • 手机上可以做网站吗/推广计划书范文
  • 东莞南城网站建设价格/如何制作自己的网页