物联网-C++——7、extern “C“、函数指针、struct

分文件编写时,用到外部函数
需要在头文件使用extern"C"

#pragma once
#if __cplusplus
extern "C" {
#endif

	int add(int a, int b);

#if __cplusplus
}
#endif

定义一个函数指针
格式:
返回值类型 (*指针名)(形参)

void test() {
	cout << "hello" << endl;
}

int main()
{
	void (*ptest)();
	ptest = test;
	ptest();

}

c++面向对象就是将事物一切行为和属性抽象为对象
用类封装
类和结构体的区别:
默认访问权限不同,结构体默认共有权限,类默认私有权限
类成员可以是函数,结构体只能函数指针

结构体

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;


struct person {
	char name[10];
	void person_eat() {
		cout << name << "吃饭" << endl;
	}
};

int main()
{
	person p;
	strcpy(p.name, "张三");
	p.person_eat();

}

class person {
private:
	char name[10];
public:
	void set_name(const char* sname) {
		strcpy(name,sname);
	}
	char* get_name() {

			return name;
	}

};

int main()
{
	person p;
	p.set_name("zhangsan");
	cout << p.get_name() << endl;

}

练习:

//创建一个类,提供初始化方法,对成员进行赋值
class person {
private:
	char name[10];
	int age;
public:
	void person_init(const char* p_name,int p_age) {
		if (p_name != NULL && p_age>0 && p_age<150) {
			strcpy(name,p_name);
			age = p_age;
		}
	}
	char* get_name() {

			return name;
	}
	int get_age() {
		return age;
	}

};

int main()
{
	person p;
	p.person_init("张三", 18);
	cout << p.get_name() << endl;
	cout << p.get_age() << endl;
}

练习2:

//创建立方体类,属性:长宽高。行为:获取体积、面积
//类函数和全局函数判断两个立方体是否相等
class cube {
private:
	int x, y, z;
public:
	void cube_init(int c_x,int c_y,int c_z) {
		x = c_x;
		y = c_y;
		z = c_z;
	}

	int get_volume() {
		return x * y * z;
	}
	int get_acreage() {
		return 2 * (x * y) + 2 * (x * z) + 2 * (z * y);
	}
	int get_x() {
		return x;
	}
	int get_y() {
		return y;
	}
	int get_z() {
		return z;
	}

	bool equal(cube c1) {
		if (x == c1.get_x() && y == c1.get_y() && z == c1.get_z()) {
			return true;
		}
		else {
			return false;
		}
	}
};

bool cube_equal(cube c1,cube c2) {
	if (c1.get_x() == c2.get_x() && c1.get_y() == c2.get_y() && c1.get_z() == c2.get_z()) {
		return true;
	}
	else {
		return false;
	}
}

int main()
{
	cube c1,c2;
	c1.cube_init(10,10,10);
	c2.cube_init(10,10,10);
	cout << c1.get_acreage() << "," << c1.get_volume() << endl;
	cout << c2.get_acreage() << "," << c2.get_volume() << endl;

	cout << c1.equal(c2) << endl;
	cout << cube_equal(c1, c2) << endl;

}

练习3:
//创建一个圆类、一个点类,判断点和圆的关系
//圆属性:中心点坐标,半径

class point {
private:
	int x, y;
public:
	void point_init(int p_x, int p_y) {
		x = p_x;
		y = p_y;
	}
	int get_x() {
		return x;
	}
	int get_y() {
		return y;
	}
};

class circle {
private:
	int x, y, radius;
public:
	void circle_init(int c_x,int c_y,int c_radius) {
		x = c_x;
		y = c_y;
		radius = c_radius;
	}

	int get_x() {
		return x;
	}
	int get_y() {
		return y;
	}
	int get_redius() {
		return radius;
	}

	void location(point p) {
		int tmp = (p.get_x() - x) * (p.get_x() - x) + (p.get_y() - y) * (p.get_y() - y);
		if (tmp == radius*radius) {
			cout << tmp << endl;
			cout << "点在圆上" << endl;
		}
		else if (tmp < radius * radius) {
			cout << tmp << endl;
			cout << "点在圆内" << endl;
			if (x == p.get_x() && y == p.get_y()) {
				cout << "并且点在圆心" << endl;
			}
		}
		else {
			cout << tmp << endl;
			cout << "点在圆外" << endl;
		}
	}
};


int main()
{
	circle c1;
	point p1;
	c1.circle_init(10,10,10);
	p1.point_init(10,10);
	c1.location(p1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值