嵌入式C++(二)(下)

简介: 嵌入式C++(二)(下)

8.2 类和对象的使用


0a2653c851af460fa595bd959398a8f1.png


#include <iostream>
#include <cstring>
using namespace std;
struct Student   //默认是公有权限
{
    int age;
    char *name;
};
class Student1   //默认是私有权限,只能在类的内部访问
{
public: //声明下面的成员为公有属性
    int age;     //类的成员变量  属性
    char *name;
    void print()  //类的成员函数  方法
    {
        cout<<"age = "<<age<<" name = "<<name<<endl;
    }
};
int main(int argc, char const *argv[])
{
    /*
    Student s1;
    s1.age = 1;
    */
   Student1 s1;
   s1.age = 1;
   s1.name = new char[32];
   strcpy(s1.name,"zhangsan");
   s1.print();
    return 0;
}


8.3 类的访问权限


访问级别由 public protected private 三个关键词组成,在使用三个关键词前,我们首先要了解类的外部和类的内部的概念。
public:公有属性,凡是在它下面定义的,类的内部和外部都可以访问
protected::保护属性,凡是在它下面定义的,在继承关系中,可以在子类中访问
private:私有属性,凡是在它下面定义的,只能在类的内部访问。


#include <iostream>
using namespace std;
class Test
{
private:  //私有属性,只能在类的内部访问
    int a;
    void f1(){}
protected://保护权限,用于继承,类的外部不能访问
    int b;
    void f2(){}
public:  //公有权限,类的内部和外部都可以访问
    int c;
    void f3(){}
private:   //同一个关键词可以出现多次
    int e;
};
int main(int argc, char const *argv[])
{
    Test t1; //Test:类 t1:对象
    //t1.a = 1;  //私有成员不能在类的外部访问
    t1.c = 200;
    return 0;
}


8.4 类中的元素说明


#include <iostream>
using namespace std;
class Circle
{
    private:
        int m_r;  //属性
        double m_s;
    public:
        void SetR(int r) //成员函数 方法
        {
            m_r = r;
        }
        double Gets()
        {
            m_s = 3.14*m_r*m_r;
            return m_s;
        }
};
int main(int argc, char const *argv[])
{
    Circle c1; //创建对象
    c1.SetR(100);
    cout<<c1.Gets()<<endl;
    return 0;
}


8.5 类的使用案例


#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
using namespace std;
class Student
{
public:
/**
 * @brief Get the Age object
 * 
 * @return int 
 */
    int GetAge();
    int GetID();
    void SetAge(int a);
    void SetID(int i);
private:
    int m_age;
    int m_id;
};
#endif


#include "student.h"
int Student::GetAge()
{
    return m_age;
}
int Student::GetID()
{
    return m_id;
}
void Student::SetAge(int a)
{
    m_age = a;
}
void Student::SetID(int i)
{
    m_id = i;
}


#include "student.h"
int main(int argc, char const *argv[])
{
    Student s1;
    s1.SetAge(18);
    s1.SetID(19);
    cout<<s1.GetAge()<<endl;
    return 0;
}


练习

设计一个圆形类和一个点类,计算点在圆外,园内,还是圆上(点和圆的关系)


1>点:
属性:横坐标和纵坐标
方法:点和点的距离
2>圆:
属性:圆心,半径
方法:设置圆心和半径
      判断点和圆的关系


#ifndef _CIRCLE_H_
#define _CIRCLE_H_
class Point
{
    private:
        int m_x;
        int m_y;
    public:
    void SetXY(int x,int y);
    int Distance(Point &p);
};
class Circle
{
    private:
        Point m_center; //圆心
        int m_r;
    public:
        void setC(int x,int y,int r);
        bool Judge(Point &p);
};
#endif


#include "circle.h"
int main(int argc, char const *argv[])
{
    Point p;
    p.SetXY(0,3);
    Circle c1;
    c1.setC(0,0,3);
    if(c1.Judge(p))
    {
        cout<<"点在圆外或者圆上"<<endl;
    }
    else
    {
        cout<<"点在圆内"<<endl;
    }
    return 0;
}


#include "circle.h"
void Point::SetXY(int x,int y)
{
    this->m_x = x;
    this->m_y = y;
}
int Point::Distance(Point &p)
{
    int dis = (p.m_x - m_x)*(p.m_x - m_x) + (p.m_y - m_y)*(p.m_y - m_y);
    return dis;
}
void Circle::setC(int x,int y,int r)
{
    m_center.SetXY(x,y);
    m_r = r;
}
bool Circle::Judge(Point &p)
{
    if(p.Distance(m_center) >= m_r*m_r)
    {
        return true;
    }
    else
    {
        return false;
    }
}


8.6 对象的构造和析构


8.6.1 构造函数


在c++中,有一种特殊的成员函数,名字和类名相同,没有返回值,不需要用户显示调用(也不能调用),而是在创建对象的时候自动执行.
几点说明:
    1.构造函数的名字和类型必须相同
    2.构造函数不能有返回值,不能有return语句
    3.创建对象的时候自动执行,不能手动调用
    4.主要用于对类的成员进行赋初值。(和初始化有区别)


#include <iostream>
using namespace std;
class Array
{
    private:
        int size;  //数组的容量
        int *data;  //数组首地址
    public:
        Array();  //无参构造函数
        void setVal(int Index,int value);
        int GetVal(int Index);
        ~Array();
};
Array::Array()
{
    cout<<"Array的无参构造函数"<<endl;
    size = 5;
    data = (int *)malloc(sizeof(int)*size);
}
void Array::setVal(int Index,int value)
{
    data[Index] = value;
}
int Array::GetVal(int Index)
{
    return data[Index];
}
Array::~Array()
{
    cout<<"Array的析构函数"<<endl;
    if(data != NULL)
    {
        free(data);
        data = NULL;
    }
}
int main(int argc, char const *argv[])
{
    Array a1; //创建对象,自动调用构造函数
    for(int i = 0 ; i < 5;i++)
    {
        a1.setVal(i,i+1);
    }
    for(int i = 0; i < 5;i++)
    {
        cout<<a1.GetVal(i)<<" ";
    }
    cout<<endl;
    return 0;
}
相关文章
|
2月前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
67 1
|
2月前
|
算法 Linux 程序员
嵌入式工程师以及C++程序员到公司就业需要掌握那些技术?
嵌入式工程师以及C++程序员到公司就业需要掌握那些技术?
|
2月前
|
数据处理 C++ UED
如何作为一个嵌入式软件工程师博主获得铁粉:C/C++ 技术分享之道
如何作为一个嵌入式软件工程师博主获得铁粉:C/C++ 技术分享之道
61 0
|
2月前
|
C语言 数据安全/隐私保护 C++
嵌入式中如何把C++代码改写成C语言代码
嵌入式中如何把C++代码改写成C语言代码
40 0
|
2月前
|
存储 缓存 Java
嵌入式系统中C++内存管理基本方法
嵌入式系统中C++内存管理基本方法
98 0
|
2月前
|
存储 编译器 程序员
嵌入式系统中C++基础知识精髓
嵌入式系统中C++基础知识精髓
65 0
|
2月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
2月前
|
存储 编译器 C++
嵌入式中C++ 编程习惯与编程要点分析
嵌入式中C++ 编程习惯与编程要点分析
26 1
|
2月前
|
架构师 数据挖掘 程序员
嵌入式系统中C++ 类的设计和实现分析
嵌入式系统中C++ 类的设计和实现分析
40 1
|
2月前
|
算法 小程序 编译器
嵌入式中C++开发的基本操作方法
嵌入式中C++开发的基本操作方法
29 0