《C++的慢慢学习路》第二天

Posted 余生的一天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C++的慢慢学习路》第二天相关的知识,希望对你有一定的参考价值。

1、什么是类和对象

对象是特指,类是泛指

比如:地球是对象,行星则是类

2、类的构成

类是由成员变量和成员函数共同构成的。

2.1、类的书写

#include <iostream>using namespace std;
class Stu {public: /*成员变量*/ int age; int no; string name; /*成员函数*/ void sleep(); void study();};
//::类名双冒号,通过::来访问类的成员void Stu::study(){ cout << "study" << endl;}

类声明中的public也是很重要的,明天的学习中会详细学习。

2.2、类的使用

#include <iostream>using namespace std;
/*引用头文件*/#include "stu.h"void f1(){ /*创建Stu类的对象*/ Stu s1;//对象 Stu s2; }
int main(){ f1(); return 0;}

2.3、类的对象的内存分布

结论:对于函数中的局部对象变量,对象成员是在创建对象时开辟的空间中(栈),而类的对象的成员函数则是这个类的所有对象共用的,存储于代码段。


#include <iostream>using namespace std;
/*引用头文件*/#include "stu.h"void f1(){ /*创建Stu类的对象*/ Stu s1;//对象 Stu s2; s1.age=10; s1.no=1; s1.name="xiaoming"; s2.age=20; s2.no=2; s2.name="xiaowang";  //不同的成员有着自己的成员变量 cout << "stu1:age:" << s1.age << " no:" << s1.no << " name:" << s1.name << endl; cout << "stu2:age:" << s2.age << " no:" << s2.no << " name:" << s2.name << endl; s1.study();  s2.study();//不管是对象s1还是s2调用study成员函数,结果都是一样的。 /*引用使用*/ Stu &s3 = s1; cout << "stu3:age:" << s3.age << " no:" << s3.no << " name:" << s3.name << endl; Stu *p = &s1; cout << "p:age:" << p->age << " no:" << p->no << " name:" << p->name << endl;}
int main(){ f1(); return 0;}

3、类的书写规范

一般来讲,类的声明应该写在头文件中,类的函数定义则应该写在头文件同名的cpp文件中。在cpp中使用类名双冒号(::)实现对类的成员函数的访问。

4、对象成员的访问方式

//伪代码Stu s1;//定义一个成员/*成员的访问方式有以下几种方式*//*1*/s1.name;/*2 引用*/Stu &s2 = s1;s2.name;/*3 指针*/Stu *p = &s1;p->name;/*类名::静态成员 这在后续的学习中再细说*/

5、函数的重载

定义:多个函数的函数名相同,而参数不同便叫作函数重载

#include <iostream>using namespace std;
void fun(int x){ cout << "fun(int x):" << x << endl;}
void fun(){ cout << "fun()" << endl;}
void fun(string name){ cout << "fun(string name):" << name << endl;}
int main(){ fun(2); fun("zhaojie"); fun(); return 0;}

通过思考调用函数的时候是否存在歧义来进行函数重载的合理性判断。函数重载也可以用到类中的成员函数上。

6、默认参数值

在声明函数的时候,给参数指定默认参数值,在定义的时候则不需要写参数的默认参数值。这样,在调用函数的时候,便会有默认参数值,存在默认参数值的参数,即使调用的时候不存入参数也是有默认值的。

注意:当函数存在默认参数值的时候,其后的参数都应该有默认参数值!

#include <iostream>using namespace std;
Stu::stu():age(100), no(200){ cout<<"Stu:Stu()"<<endl;}
Stu:Stu(int age, int no):age(age), no(no){ cout << "Stu::Stu(int age, int no)" <<endl;}
int main(){ Stu stu1; //Stu:Stu() cout << "stu1.age:" << stu1.age <<endl; //age:100 Stu stu2(10,20); cout << "stu2.age:" << stu2.age << endl;//age=10 return 0;}

7、析构函数

析构函数是没有参数的,通过~类型()的形式表示类的析构函数。

析构函数在对象被销毁的时候触发调用。

8、this

说明:

1)this在构造函数中是指针,指向正在创建的对象;

2)this在成员函数中是指针,指向调用成员函数的对象;

3)在成员函数中的this可以访问成员变量;

4)成员函数不能通过this访问构造函数;

5)构造函数可以使用this,用法与成员函数中this类似

以上是关于《C++的慢慢学习路》第二天的主要内容,如果未能解决你的问题,请参考以下文章

今天是项目经理指导学习PHP实战项目的第二天

Java自学第二天

C++第二天笔记2016年01月27日(周三)P.M

学java的第二天

学习Python第二天

python学习第二天