C++基础(一):面向对象

出于本科毕设需要,最近开始自学C++。网上推荐教材不一,很多计算机系大佬都不推荐我看C++ Primer入门,借来一看确实非常大部头。我自学基于《零起点学通C++》,比较通俗易懂,萌新友好型;缺点是缺乏练习题,好在毕设不缺练手机会hhh。基本我会看完一章、把对应的代码都实现,然后按章更新。必须吐槽CSDN不能像gituhb一样方便的上传代码(要么就是上传赚积分的),只能发博客、不能建个repository。后面有了对面向对象更深的体会再来更新,欢迎指正交流><。

面向对象

声明一个类

eg

class Human
{
    public:
    void GetStature();\\成员函数
    void GetWeight();
    private:
    int stature; \\成员变量
    int weight;
}; //类声明之后要有分号,函数定义之后不用

声明一个human类,没有分配内存,只告诉了编译器human包含哪些类型的数据,功能是什么;同时,还告诉了编译器这个类占多大空间,根据human类里的变量个数和类型决定。

命名习惯

name eg rule
类名 Human 首字母大写,也可以全大写
成员变量 stature 全部小写
成员函数 GetWeight 两个单词合写,首字母大写,也可以写成get_weight

创建一个对象

Human Tom即可

公有

Public:声明一个类的公有成员,即可以被该类的所有对象访问。

私有

私有成员不能被对象直接访问,只能通过在类中设置接口函数

# include 
using std::cout;

class Human
{
public:
    void set(int w){weight=w;} //赋值,接口函数
    int print(){return weight;} //读取
    void eat(){cout<<"我会吃饭!\n";}
private:
    int weight;
};

int main(){
    Human Tom;
    Tom.set(5);
    cout<<"汤姆的体重为:"<

一般情况下,将类的数据成员设为私有,使用类的公有函数来访问。好处是:

  1. 各对象不可以直接访问并修改数据,提高数据安全性;
  2. 将数据的赋值和读取分离,互不影响。

成员函数的声明和定义是分开的

Note:良好的代码习惯,成员函数的定义和函数定义一样,应先声明,再定义。

  • 声明:在类定义中,声明函数类型和参数即可;
  • 定义:成员函数的定义只用在函数明前加类名和双冒号,可以放到类声明的代码块之外、主函数之后。C++基础(一):面向对象_第1张图片

为什么要分开定义和声明?

  1. 普通内联函数
    在声明函数时,用inline void functionname();,不需要程序跳到指令集处执行,而是直接在调用函数处赋值代码。适用于较小的程序,能提高效率。
    Note:正常顺序是先写好所有代码,再根据需求设置内联。

  2. 成员内联函数
    也可以在类定义中将成员函数声明为inlie;如果将成员函数的声明和定义合并,即都在类定义中,则自动生成内联函数。所以分开定义和声明,可以在大型程序执行多次时提高效率;对于短程序,也可以合并声明和定义。

const成员函数

eg
void print() const{cout<<"两数相乘"<
该函数没有参数,返回void。当一个const成员函数试图修改成员变量的值,编译器会报错。因此,对于我们不想让成员函数修改成员变量的值,都应该声明为const

一般先把所有函数都定义好,再逐个分析哪些是需要const的,这一过程为const设计。

构造函数

构造函数是不需要声明类型的,也没有返回值。very interesting!

\\创建类,并定义构造函数
class Rectangle{
    public:
    Rectangle(int l, int w){length=l; width=w;}
    \\构造函数的名字和类名一致,不需要类型和返回值
    private:
    int l;
    int w;
}
\\使用构造函数创建对象
Rectangle a(3, 4);

Note:构造函数也是可以、并最好把声明和定义分开的,上例没有分开。参见分开定义和声明构造函数.cpp源码。

默认构造函数

只要不创建任何构造函数,系统会为我们创建一个什么功能都没有的、不带任何参数的默认构造函数;如果手动创建,则默认构造函数被屏蔽。如果想要同时有带参数的构造函数,又要不带参数的,可以创建同名不同参数的两个构造函数。

析构函数

用于销毁构造函数的内存空间。

//析构函数的声明
class A{
    public:
    ~A(){} //就多个波浪号
};

析构函数无返回值,无参数。
程序结束时,析构函数会自动被调用。

析构数组

A a[3];一次声明许多对象,这些对象放到许多数组中,对象a[0],a[1],a[2]

头文件

一般在.h头文件中声明类,在一个.cpp文件中定义类的函数,在main.cpp中使用这些函数。

总结

  • 构造函数和析构函数如果不显式定义,编译器会自动定义。所以很多时候可以省略。
  • 应养成分开函数声明和定义的习惯。

你可能感兴趣的:(毕业设计)