美文网首页
7.QT+VS动态库,父类-子类

7.QT+VS动态库,父类-子类

作者: 豚大叔的小屋 | 来源:发表于2023-01-27 17:52 被阅读0次

1.父类Base.h

ifndef BASE_H

define BASE_H

include "algogeocal_global.h"

include <QObject>

class ALGOGEOCALSHARED_EXPORT CalPara
{
public:
double Distance;
CalPara()
{
this->Distance = 10;
}
CalPara& operator = (const CalPara& para)
{
this->Distance = para.Distance ;
return *this;
}
};

class ALGOGEOCALSHARED_EXPORT Base : public QObject
{
Q_OBJECT
public:
enum MachineType
{
Machine_A,
Machine_B
};
virtual void setMachineType(MachineType type) {}
virtual void startCalculate(){}
signals:
void sgnl_TransPara(CalPara);
};

2.子类Sun.h

include "Base.h"

struct Point
{
double u;
double v;
};
class Sun : public Base
{
public:
Sun();
~Sun();
void setMachineType(MachineType type);
void startCalculate();
private:
void CoordinateTransform(const Point *p, double angle, Point *p_new);
private:
MachineType m_MachineType;
}

3.子类Sun.cpp

include "Sun.h"

Sun::Sun()
{}
Sun::~Sun()
{}
void Sun::setMachineType(MachineType type)
{
m_MachineType = type;
}
void Sun:: startCalculate()
{
double Distance;
if(m_MachineType ==Machine_A)
{
Distance=20;
}
CalPara p;
p.Distance = Distance ;
emit sgnl_TransPara(p);
}
4.父类、子类、友元类总结
1)一个类里的成员属性可分为public、private、protected。
我公开的东西,大家都可以访问;我保护的东西,我,我儿子和我的朋友可以访问,我的隐私,只有我和我的朋友可以访问。

图片.png
在C++里,一个类的所有成员,该类的友元类friend class都可以访问。而private成员,只有友元类可以访问使用。
图片.png

2)友元类
friend class是单向的,不具备传递性,你在设计类的时候,如果有些属性你不希望暴露给所有人,但又不得不让某些指定的模块使用,那就把这些成员划分到private属性里,同时把需要访问这些成员的模块声明为该类的友元类或友元函数。
class Base{
public:
int GetMyName();
protected:
double GetMyMoney();
private:
std::string GetMySecret();
friend class MyFriend;
};

class MyFriend{
public:
std::string TalkToEveryone(){
Base base;
return base.GetMySecret();
}
};
3)父类和子类之间,牢记保护\protected这个词。所有protected属性的成员,都是留给儿子的。而外人可用不到。在设计类的时候,如果有些属性你不希望暴露给所有人,但你希望给子类留着,那就把这些成员都划分到protected属性里。
class Base{
public:
int GetMyName();
protected:
double GetMyMoney();
private:
std::string GetMySecret();
};
class MySon:public Base{
public:
void SpendMoney(){
double money = GetMyMoney();
findGirls(money);
}
};
4)继承分级别的,C++里对类的继承分为public继承,protected继承,private继承三种,三者的访问权限也是由低到高的。在按照某种权限方式继承时,会将权限低于自己的成员提升至跟自己同一级别,而无法将权限高于自己的成员拉低。

图片.png

相关文章

  • 7.QT+VS动态库,父类-子类

    1.父类Base.h ifndef BASE_H define BASE_H include "algogeoca...

  • python 继承和多态

    继承 子类继承父类 子类继承父类,并覆盖父类 多态 动态语言

  • C++之数据类型转换

    上下行转换 子类上行转换成父类 父类下行转换成子类 静态转换(static_cast) 动态转换(dynamic_...

  • 单PC中BLACKBOARD MODEL编写概述

    首先需要根据动态库的动能,自己编写黑板类与报文协议类的定义(头文件)。黑板类可以通过父子类来细分功能。在父...

  • Java多态

    多态的前提: 子父类的继承关系 方法的重写 父类引用指向子类对象 Animal a = new Cat(); 动态...

  • 继承、多态

    继承 子类和父类只是相对而言,比如谁是谁的父类(子类)。父类子类是种相对关系,不会凭空产生 子类可以继承父类的成员...

  • java 上溯造型与下塑造型

    父类: 子类: 父类指向父类: 结果: 1 我是杜江2、子类指向子类: package com.neusoft.c...

  • 2.类与对象

    子类继承父类,子类继承父类的方法,即子类会自动获得父类的功能 子类从父类继承的方法可以由子类重新定义、改变或延伸 ...

  • java学习

    子类是父类的类型,但父类不是子类的类型。 子类的实例可以声明为父类型,但父类的实例不能声明为子类型。 class ...

  • 寒假5:继承

    继承格式:public class 子类 extends 父类 { }子类也称为派生类父类也称为基类、超类 子类...

网友评论

      本文标题:7.QT+VS动态库,父类-子类

      本文链接:https://www.haomeiwen.com/subject/rfpehdtx.html