出于本科毕设需要,最近开始自学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<<"汤姆的体重为:"<
一般情况下,将类的数据成员设为私有,使用类的公有函数来访问。好处是:
Note:良好的代码习惯,成员函数的定义和函数定义一样,应先声明,再定义。
普通内联函数
在声明函数时,用inline void functionname();
,不需要程序跳到指令集处执行,而是直接在调用函数处赋值代码。适用于较小的程序,能提高效率。
Note:正常顺序是先写好所有代码,再根据需求设置内联。
成员内联函数
也可以在类定义中将成员函数声明为inlie;如果将成员函数的声明和定义合并,即都在类定义中,则自动生成内联函数。所以分开定义和声明,可以在大型程序执行多次时提高效率;对于短程序,也可以合并声明和定义。
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中使用这些函数。