分文件编写时,用到外部函数
需要在头文件使用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);
}