C++快速入门--3

只编译一次头文件

一个.h文件只能被编译一次,如果你在多个文件中包含,那就会被编译多次,从而程序出错,那么在C中,你可以这样来控制只包含一次

#ifndef _PROGRAME
#define _PORGRAME
//这里写定义的内容
typedef struct Node{
    int data;
    struct Node * next;
}Node;
#endif

通过如上方法,不过你引入这个头文件几次,编译器都只会编译一次,而在C++中只需要引入一个指令就能达到同样的效果

#pragram once
typedef struct Node{
    int data;
    struct Node * next;
}Node;

将类的实现和类的成员属性分离

在C++中同通常不会把类的实现和类的属性放到一起,而是分开实现,如果将函数和属性放到一起,编译器自动把函数转换成内联函数,之前的helloword中,介绍了如下的实现方式

class Teacher{
private:
    int age;
    char name[0];
public:
    void sayHello(){
        cout<<"hello"<<endl;
    }
};

但是在实际开放中,往往会把类中的方法和类的成员属性分离,那么就有如下实现方法,你先需要建立两个文件Teacher.h、Teacher.cpp

//Teacher.h
#pragam once//避免多次编译,可以使用#ifndef #define #endif
class Teacher{
private:
    int age;
    char name[32];
public:
    void setAge(int age);
    int getAge();
};

//Teacher.cpp
include "Teacher.h"
void Teacher::setAge(int age){
    this->age = age;
}
int Teacher::getAge(){
    return this->age;
}

//main函数中使用
#include "Teacher.h"
int main(){
    Teacher t;
    t.setAge(36);
    cout<<t.getAge()<<endl;
}

面向对象初步案例

我们如果想判断一个点是否在圆内,如果使用面向对象的观点看待问题,那么我们可以将圆看成一个对象,将点看成一个对象

//Circle.h
#pragam once
#define pi 3.14
class Circle{
private:
    int r;
    int s;
public:
    void setR(int r);
    int getR(){
        return this->r;
    }   
    int getS();
    bool isContainPoint(Point &point);
};
//Circle.cpp
#include "Circle.h"
void Circle::setR(int r){
    this->r = r;
}   
int Circle::getR(){
    return this->r;
}   
int Circle::getS(){
    return pi * (this->r) * (this->r);
}
bool Circle::isContainPoint(Point &point){
    if(point.a * point.a + point.b * point.b < (this->r) * (this->r)){
        return true;
    }else{
        return false;
    }
}

//Point.h
class Point{
private:
    int a;
    int b;
public:
    void setA(int a);
    void setB(int a);
}
//Point.h
void Point::setA(int a){
    this->a = a;
}
void Point::setB(int a){
    this->b = b;
}

//Main.cpp
#include "iostream"
#include "Circle.h"
#include "point.h"
using namespace std;
int main(){
    Circle c;
    c1.setR(2);
    Point p;
    p.setA(1);
    p.setB(1);
    if(c.isContainPoint(p)){
        cout<<"这个点包含在c中"<<endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值