C++ 学习笔记(二)

2023-10-27

C++

继承与派生

1.公有继承
是指在源生一个类时继承方式为public的继承方式。在public继承方式下,基类成员在派生类中的访问权限为:基类的公有和保护成员的访问属性在派生类中不变而基类的私有成员不可访问。即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员。派生类的其他成员可以直接访问它们。但需要注意的是,这与派生类的对象对基类成员的边访问权限是两个不同概念。派生类的对象是在类外定义的,派生类的对象可以访问基类的公有成员。

#include <iostream>
using namespace std;
class A
{
    public:
    int a1;
    protected:
    int a2;
    private:
    int a3;
    public:
    A()   //类A的构造函数,在public里
    {
        a1=1;a2=2;a3=3;
    }
    void print1()    //成员函数
    {
        cout<<"a1="<<a1<<",   a2="<<a2<<",   a3="<<a3<<endl;
    }
};
class B1:public A   //派生类B1公有继承基类A
{
    public:
    int b1;    //B1新增公有成员
    B1(int cb1)  //类B1的构造函数
    {
       b1=cb1;
    }
    void print2()
    {
        cout<<"a1="<<a1;  //派生类成员函数访问基类公有成员
        cout<<",   a2="<<a2<<endl;  //派生类成员函数访问基类保护成员
        //cout<<"a3="<<a3<<endl;  /派生类成员函数不能访问基类私有成员
        cout<<"b1="<<b1<<endl;
    }
};
int main()
{
    B1 ob1(100);    //定义派生类的对象ob1
    cout<<"ob1.a1="<<ob1.a1<<endl;  //派生类的对象ob1可以访问基类公有成员
    //cout<<"ob1.a2="<<ob1.a2<<endl;ob1是派生类的对象,不能访问基类保护成员a2和私有成员a3
    //cout<<"ob1.a3="<<ob1.a3<<endl;
    ob1.print1();
    ob1.print2();
    return(0);
}

运行结果:
ob1.a1=1
a1=1, a2=2, a3=3
a1=1, a2=2
b1=100

2.私有继承

私有继承是指在派生一个类时继承方式为private 的继承方式。基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可访问。即基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。

#include <iostream>
using namespace std;
class A
{
    public:
    int a1;
    protected:
    int a2;
    private:
    int a3;
    public:
    A()   //类A的构造函数,在public里
    {
        a1=1;a2=2;a3=3;
    }
    void print1()    //成员函数
    {
        cout<<"a1="<<a1<<",   a2="<<a2<<",   a3="<<a3<<endl;
    }
};
class B1private A   //派生类B1私有继承基类A
{
    public:
    int b1;    //B1新增公有成员
    B1 (int cb1)  //类B1的构造函数
    {
       b1=cb1;
    }
    void print2()
    {
        cout<<"a1="<<a1;  //派生类成员函数访问基类公有成员
        cout<<",   a2="<<a2<<endl;  //派生类成员函数访问基类保护成员
        //cout<<"a3="<<a3<<endl;  /派生类成员函数不能访问基类私有成员
        cout<<"b1="<<b1<<endl;
    }
};
int main()
{
    B1 ob1(100);    //定义派生类的对象ob1
    //cout<<"ob1.a1="<<ob1.a1<<endl;  //派生类的对象ob1不可以访问基类公有成员
    //cout<<"ob1.a2="<<ob1.a2<<endl;ob1是派生类的对象,不能访问基类保护成员a2和私有成员a3
    //cout<<"ob1.a3="<<ob1.a3<<endl;
    //b1.print1();  //生类的对象ob1不可以访问基类公有成员函数
    ob1.print2();
    return(0);
}

运行结果:
a1=1, a2=2
b1=100
该例中无论是派生类的成员函数print2()还是通过派生类的对象ob1,都无法访问基类的私有成员a3。所以如果要输出a3的值,可以在类B1中增加一个成员函数,如:void print3(){print1();}

这样,在主函数中可以通过ob1.print3()间接访问a3。

如果继续派生,那么该基类的所有成员对于新的派生类来说都是不可访问的,即以privare 方式的继承,只能“传递一代”,基类成员无法在进一 步的派生中发挥作用。例如B1继续派生一个新类 B11时,在B11中无法访问 B1从A继承的任何成员了。

3.保护继承

保护继承是指在派生一个类时继承方式为protected的继承方式。保护继承方式的访问控制权限介于公有继承和私有继承之间。保护继承的特点是基类的所有公有成和保护成员都成为派生类的保护成员,基类的private成员和不可访问成员在派生类中可访问。

派生类的成员可以直接访问基类的public成员和protected成员,而派生类的对象无直接访问基类的任何成员,这跟私有继承的效果一样。如果把程序中的private为protected,则派生类由私有继承改为了保护继承,程序运行结果完全一样。但是,如果从派生类再往下派生新的类时,保护继承和私有继承就有区别了。例如:

(1)类B以protected方式继承类A,不管类C以何种方式继承类B,那么类C的成员函数可以访问间接基类类A的public或protected成员。

(2)类B以pivate 方式继承类A,不管类C以何种方式继承类B,那么类C的成员函数不能直接访问类A的所有成员。因为类A的成员已经变成类B的pireate成员,类B再派生类C,类B的私有成员对于类C的成员自然是不可见的。
在这里插入图片描述

#include <iostream>
using namespace std;
class A
{
    public:
    int a1;
    protected:
    int a2;
    private:
    int a3;
    public:
    A()   //类A的构造函数,在public里
    {
        a1=1;a2=2;a3=3;
    }
    void print1()    //成员函数
    {
        cout<<"a1="<<a1<<",   a2="<<a2<<",   a3="<<a3<<endl;
    }
};
class B1protected A   //派生类B1私有继承基类A
{
    public:
    int b1;    //B1新增公有成员
    B1 (int cb1)  //类B1的构造函数
    {
       b1=cb1;
    }
    void print2()
    {
        cout<<"a1="<<a1;  //派生类成员函数访问基类公有成员
        cout<<",   a2="<<a2<<endl;  //派生类成员函数访问基类保护成员
        //cout<<"a3="<<a3<<endl;  /派生类成员函数不能访问基类私有成员
        cout<<"b1="<<b1<<endl;
    }
    void print3()
    {
        print1();
    }
};
int main()
{
    B1 ob1(100);    //定义派生类的对象ob1
    //cout<<"ob1.a1="<<ob1.a1<<endl;  //派生类的对象ob1不可以访问基类公有成员
    //cout<<"ob1.a2="<<ob1.a2<<endl;ob1是派生类的对象,不能访问基类保护成员a2和私有成员a3
    //cout<<"ob1.a3="<<ob1.a3<<endl;
    ob1.print2();  //生类的对象ob1不可以访问基类公有成员函数
    ob1.print3();
    return(0);
}

运行结果:
a1=1, a2=2 , a3=3
b1=100
a1=1, a2=2 , a3=3

派生类的构造函数和析构函数

派生类的构造函数
在设计派生类的构造函数时,不仅要考虑派生类所增加的数据成员的初始化,还要考虑基类数据成员的初始化。
(1)简单派生类的构造函数
派生类构造函数名(总参数列表):基类构造函数名(参数列表)
{派生类中新增数据成员初始化语句;}

执行顺序:派生类构造函数先调用基类构造函数,再执行派生类构造函数本身。

#include <iostream>
using namespace std;
class A
{
    public:
    A(int i)
    {
        x=i;
        cout<<"基类A的构造函数被调用"<<endl;
    }
    void display1()
    {
        cout<<"基类私有数据成员x="<<x<<endl;
    }
    private:
    int x;
};
class B:public A
{
    public:
    B(int i,int j):A(i)    //派生类B的构造函数要以参数列表方式为基类A传递参数,用于x的初始化
    {
        y=j;
        cout<<"派生类B的构造函数被调用"<<endl;
    }
    void display2()
    {
        display1();
        cout<<"派生类私有数据成员y="<<y<<endl;
    }
    private:
    int y;
};
int main()
{
    B b(1,2);   //对象b必须要有两个参数
    b.display2();
}

运行结果:
基类A的构造函数被调用
派生类B的构造函数被调用
基类私有数据成员x=1
派生类私有数据成员y=2

派生类B的构造函数应该以参数列表方式给基类A传递参数,用来进行基类成员的初始化。
(2)派生类中包含内嵌对象
派生类构造函数名(总参数列表):基类构造函数名(参数列表),内嵌对象名(内嵌对象参数)
{派生类中新增数据成员初始化语句;}

执行顺序:派生类构造函数先调用基类构造函数,然后是内嵌对象的构造函数,最后执行派生类构造函数本身。

#include <iostream>
#include <string>
using namespace std;
class Student
{
    public:
    Student(int n,string nam)   //基类构造函数
    {
        num=n;
        name=nam;
    }
    void display()      //基类成员函数,用来输出基类数据成员
    {
        cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
    }
    protected:
    int num;
    string name;
};
class Student1:public Student
{
    public:
    Student1(int n,string nam,int n1,string nam1,int a,string ad):Student(n, nam),monitor(n1,nam1)    //派生类构造函数
    {
        age=a;   //此处只对派生类新增的数据成员进行初始化
        addr=ad;
    }
    void show()
    {
        cout<<"该学生是:"<<endl;
        display();
        cout<<"age:"<<age<<endl;
        cout<<"address:"<<addr<<endl;
    }
    void show_monitor()  //输出子对象的数据成员
    {
        cout<<endl<<"班长是:"<<endl;
        monitor.display();    //调用基类成员函数
    }
    private:
    Student monitor;     //定义子对象
    int age;
    string addr;
};
int main()
{
   Student1 stud1(10010,"wang-li",10001,"li-sun",19,"115 Beijing Road,Shanghai");
   stud1.show();   //输出第一个学生的数据
   stud1.show_monitor();   //输出子对象的数据
   return(0);
}

运行结果:
该学生是:
num:10010
name:wang-li
age:19
address:115 Beijing Road,Shanghai

班长是:
num:10001
name:li-sun

多继承
多继承的定义格式:
class 派生类名:继承方式1 基类名1,继承方式2 基类名2,·······
{新增的数据成员和函数成员的描述;}
多继承时,派生类的构造函数格式:
派生类名(总参数列表):基类名1(参数列表1),基类名2(参数列表2),······,基类名n(参数列表n),子对象名1(参数表1),子对象名2(参数表2),······,子对象名n(参数表n)
{派生类构造函数体;}

#include <iostream>
using namespace std;
class B1
{
    public:
    B1(int i )  //基类构造函数
    {
       cout<<"B1构造函数被调用";
       x=i;
       cout<<"x="<<x<<endl;
    }
    ~B1()      
    {
        cout<<"B1析构函数被调用"<<endl;
    }
    protected:
    int x;
};
class B2
{
    public:
    B2(int j)  //基类构造函数
    {
        cout<<"B2构造函数被调用";
        y=j;
       cout<<"y="<<y<<endl;
    }
    ~B2()      
    {
        cout<<"B2析构函数被调用"<<endl;
    }
    protected:
    int y;
};
class B3
{
    public:
    B3()  //基类构造函数
    {
        cout<<"B3构造函数被调用"<<endl;
       
    }
    ~B3()      
    {
        cout<<"B3析构函数被调用"<<endl;
    }
};
class C:public B1,public B2,public B3
{
    public:
    C(int a,int b,int c,int d):B1(a),ob1(b),ob2(c),B2(d)    //B3中没有数据成员,可以不写
    {}
    private:
    B1 ob1;   //定义子对象
    B2 ob2;
    B3 ob3;
};
int main()
{
   C obj(1,2,3,4);
   return(0);
}

运行结果:
B1构造函数被调用x=1
B2构造函数被调用y=4
B3构造函数被调用
B1构造函数被调用x=2
B2构造函数被调用y=3
B3构造函数被调用
B3析构函数被调用
B2析构函数被调用
B1析构函数被调用
B3析构函数被调用
B2析构函数被调用
B1析构函数被调用
先调用基类B1,B2,B3的构造函数,再调用C的对象成员ob1,ob2,ob3的构造函数。析构函数执行次序与构造函数相反。

多继承和多层次继承的二义性

在多继承情况下,如果在派生类中使用的某个成员名在多个基类中出现,而在派生类中没有定义,这时使用该成员名就会出现二义性问题。采用虚基类可以解决此问题。虚基类的初始化不是在其直接派生类中进行,而是在其间接派生类中进行的。首先调用虚基类的构造函数,然后是非虚基类的构造函数,最后是派生类的构造函数。

#include <iostream>
#include <string>
using namespace std;
class Person
{
    public:
    Person(string nam,string s,int a)
    {
        name=nam;
        sex=s;
        age=a;
    }
    protected:
    string name;
    string sex;
    int age;
};
class Teacher:virtual public Person
{
    public:
    Teacher(string nam,string s,int a,string t):Person(nam,s,a)
    {
        title=t;
    }
    protected:
    string title;
};
class Student:virtual public Person
{
    public:
    Student(string nam,string s,int a,float sco):Person(nam,s,a)
    {score=sco;}
    protected:
    float score; 
};
class Graduate:public Teacher,public Student
{
    public:
    Graduate(string nam,string s,int a,string t,float sco,float w):Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco)
    {wage=w;}
    void show()
    {
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"score:"<<score<<endl;
        cout<<"title:"<<title<<endl;
        cout<<"wages:"<<wage<<endl;
    }
    private:
    float wage;
};
int main()
{
    Graduate grad1("张三","男",24,"助教",90,2250.5);
    grad1.show();
    return(0);
}


运行结果:
name:张三
sex:男
age:24
score:90
title:助教
wages:2250.5
类Person作为类Teacher和类Student的公共基,类Teacher和类Student共同派生类Graduate。
程序执行时,先对虚基类Person初始化,然后对类Teacher和类Student初始化虽然这两个类时虚基类Person的直接派生类,他们的参数表中都包含公共基类Person的参数项,但不会再对类Person进行初始化,这样就会避免虚基类的重复初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 学习笔记(二) 的相关文章

  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • 提取单花括号内的值

    我想要一个收藏 value 一个字符串使用正则表达式 例如 lorem ipsum field1 lorem ipsum field2 lorem ipsum field1 lorem ipsum field2 field3 我会得到 fi
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 使用 DataGridViewCheckboxCell 真正禁用 DataGridView 中的复选框

    有谁知道如何使用 DataGridViewCheckboxCell 禁用 DataGridView 中的复选框 我可以将其设置为只读 并设置背景颜色 但我无法让复选框本身显示为禁用状态 有什么想法吗 Guess 你必须自己画 http so
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • DbContext.SaveChangesAsync 异常处理

    当搭建新的脚手架时ApiController通过 Visual Studio 2013 中的异步操作和实体框架支持 某些方法可以包装DbContext SaveChangesAsync https msdn microsoft com en
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C

随机推荐

  • vuex是什么

    vuex是什么 一 vuex是什么 什么是vuex 一 vuex是什么 1 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 它由五部分组成 分别是 state actions mutations getters module
  • Electron官方实验工具Electron Fiddle

    如果开发者想验证一段简短的代码是否可以在Electron框架内正常运行 那么自己创建个Electron项目 再搞个开发调试环境 就太麻烦了 Electron官方团队为开发者提供了一个更快捷的创建项目并进行试验的工具 Electron Fid
  • 豪华气派!这些院校的图书馆也太美了!

    博尔赫斯曾经说过 我心里一直都在暗暗设想 天堂应该是图书馆的模样 图书馆作为校园里的重要建筑 可以说是大学的门面 很多同学在择校时也会重点关注学校的图书馆 把它作为了解学校底蕴的通道和入口 今天我们就来看看各大高校的神仙图书馆吧 北京大学图
  • ffmpeg vscode debug编译错误【已解决】

    1 make no targets Stop 修改方式 make j N 这个N查看本机有多少个核 问题查找参考链接 https github com openresty openresty issues 22 2 the EAI MEMO
  • 线性回归和逻辑回归(LR)

    回归就是输出值是连续的而不是离散的 如果是离散值 就是分类问题 1 线性回归 1 定义 给定数据集D x1 y1 x2 y2 线性回归尝试学习到一个线性模型 尽可能地输出正确标记 线性回归无非就是在N维空间中找一个形式像直线方程一样的函数来
  • 如何用3个月零基础入门网络安全?

    一 自学网络安全学习的误区和陷阱1 不要试图先成为一名程序员 以编程为基础的学习 再开始学习 我在之前的回答中 我都一再强调不要以编程为基础再开始学习网络安全 一般来说 学习编程不但学习周期长 而且实际向安全过渡后可用到的关键知识并不多 一
  • React实现自定义双向数据流

    ng是双向数据流 VM双向数据绑定 而react与vue都是单向数据流 model层的数据流向view层 今天 我们就尝试自定义实现双向数据流 案例 组件中通过监听input内容变化 进而赋值 class Bar extends React
  • windows下使用cmake+mingw配置makefile(一)

    1 下载Cmake 并配置环境变量 下载链接 https cmake org download 环境变量略 2 生成Makefile 1 新建 hello 文件夹 在hello中创建hello c测试程序 mkdir hello cd C
  • Git 在AS上的操作总结+图解(仓库创建,分支的创建,切换,更新,合并,版本回退)

    简述 本文主要是按顺序进行描述的 创建仓库 创建项目 关联并提交 创建分支 将分支合并到主分支上去 版本的回滚 分支的更新 以及一些注意事项 使用AS创建一个项目 1 创建本地仓库 就会在选中的目录下面创建一个git仓库 关联本地库成功之后
  • day87(6.7函数的重载)

    1 函数的重载 函数的重载就是在同一个类中允许同时存在一个以上的同名函数 只要它们的参数个数或类型不同即可 在同一个类中可以定义多个 同名 方法 方法名重载 overload public class PrintStream public
  • Python兼职半月赚了5570元:边学习边赚钱真的很爽!

    前几天去参加朋友聚会 还没聊几句 就看到阿杰手机 叮 地一声 弹出一条推送 支付宝已到账 5570元 我开玩笑说 你暑假都有这么多生活费啊 羡慕了 快乐都是别人的 没想到阿杰说 除了管爸妈要生活费 我还不能搞点副业儿养活自己吗 我不酸 仔细
  • 尽量使用 useReducer,不要使用 useState

    原文 useReducer don t useState 本文难度 入门级别 本文默认你已经大概了解过 React Hooks 如果不了解可以先看看 ReactJS 的文档 当开发者们开始在他们的应用中使用 React Hooks API
  • DSP28335的RS232串口通讯试验

    目录 前言 一 理论部分 基本概念 SCI数据格式 管脚定义 逻辑电平规定 波特率 二 F28335配置RS232串口通讯 DSP28335SCI控制框图 寄存器配置 三 验证 验证思路 试验环境 关键程序 试验结果 前言 串口通信 Ser
  • JS——面向对象

    文章目录 1 class继承 1 class继承 定义一个类 属性和方法 定义一个学生类 class Student constructor name this name name hello alert Hello var xiaomin
  • 基于机器视觉的水果检测算法实现

    一 摘要 这是一款基于卷积神经网络和数字图像处理的智能水果检测和分类系统 由检测 分类两个部分组成 通过互联网下载和使用多媒体处理工具对水果拍摄视频剪辑处理得到大量水果图片 对图片进行标定获得数据集 并将数据集分成训练集和测试集 检测部分使
  • 基于二阶锥规划(SOCP)松弛和线性离流的配电网规划(DNP)方法示例(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 配电网最优潮流 Optimal Power Flow OPF 问题是指在满足一定约束条件的情况下 通过控制配电网中的可控变量 使配电网达到优化运行的目的 由于OPF
  • 手把手教你搭建优雅的ssm框架(完整)

    直接开始搭建 使用的是idea工具 新建一个maven项目 加入框架支持 点开目录后 你会发现里面缺少目录 我们自己创建一下 在pom xml中添加依赖 这些依赖必不可少 后面可以根据需求自己添加
  • 第十四届蓝桥杯国赛python青少组题目

    LQGS14PB01 时间限制 3000MS 内存限制 589824KB 题目描述 编程实现 注 input 输入函数的括号中不允许添加任何信息 给定一个字符串S S长度 lt 100 统计字符串中字母一共有多少个 例如 S 1Abb 其中
  • keil 软件如何生成.hex文件

    1 当程序编译通过没错误了 按照下图步骤勾选 点击魔术棒 output界面 勾选hex 2 勾选完点击ok 再对程序进行编译 出现下图内容 则生成hex文件成功
  • C++ 学习笔记(二)

    C 继承与派生 1 公有继承 是指在源生一个类时继承方式为public的继承方式 在public继承方式下 基类成员在派生类中的访问权限为 基类的公有和保护成员的访问属性在派生类中不变而基类的私有成员不可访问 即基类的公有成员和保护成员被继