大家好,今天为大家更新第二部分
什么是类、对象和成员
类是由若干个变量和相关的函数组成,而对象则可拥有这些变量和函数。
如果将硬盘比作一个类的话,那么硬盘的品牌则是该硬盘的一个对象,如:希捷硬盘是硬盘的一个对象,型号、容量和转速是该类的数据成员,读取数据、写入数据是该类的方法成员,又叫成员函数;数据成员和成员函数统称为该类的成员,对象拥有并且可以封装这些成员。
声明一个类
#include <iostream.h> using namespace std; class Human { public: void GetStature(); void GetWeight(); private: int stature(); int weight(); } ; int main(int argc, char *argv[]) { return 0; } |
(public:)公有的:该类的对象可以直接访问这些成员
(private:)私有的:表示它后面的成员都是私有的,不能被对象直接访问,必须通过公有的成员函数才能访问
定义一个对象
定义一个对象很简单,只需要写下一个类名,空一格,然后敲入你要定义的对象名即可
类与对象的区别:
类是一个抽象的名词,而对象则是实际的个体,比如说人类是泛指所有的人,而Peter却是一个具体的人
#include <iostream.h> using namespace std; class Person { public: void GetStature(){ cout<<stature<<endl; } void GetWeight(); void SetStature(int x){ stature=x; } void SetWeight(int x); private: int stature; int weight; } ; void Person::GetWeight() { cout<<weight; } void Person::SetWeight(int x){ weight=x; } int main(int argc, char *argv[]) { Person peter; peter.GetStature();
cout<<"peter的身高是:"; peter.SetStature(8); cout<<endl; peter.SetWeight(80); cout<<endl; cout<<"peter的体重是:"; peter.GetWeight(); return 0; } |
类的声明有两种方法:
第一种
class Person { public: void GetStature(){ cout<<stature<<endl; } void GetWeight(); void SetStature(int x){ stature=x; } void SetWeight(int x); private: int stature; int weight; } ; |
第二种:
void Person::GetWeight() { cout<<weight; } |
定义类和对象容易犯的错误
类是个抽象的名词,它不是具体的某个个体,因此我们无法对它进行赋值操作
int = 5;这个是错误的,int是一个类型,不是具体的个体,应改为 int a=5;
注意点:
① 要使用关键字class来声明一个类
② 要使用类名来定义一个对象
③ 不能混淆声明和定义,声明是说明该类是什么,定义则是为一个对象分配内存
④ 要用点运算符来访问类的成员
⑤ 要使用对象与点运算符访问对象的数据成员并给它们赋值
⑥ 不要混淆类和对象,不要给类赋值
最后:
函数是用来执行一定功能的代码块,成员函数则是只能被类的对象所使用的函数;对象只能使用该类的函数,假如类没有提供某个函数,那么对象就不具备该函数
公有与私有
关键字public可以将类的成员说明为公有,即可以被该类的所有成员访问
如果在类中定义的成员没有加public: 关键字的话,则是默认为私有的成员(private:),私有成员不能被对象直接访问,只能通过在类中设定的接口函数来访问
内联函数
关键字inline声明函数,使用内联函数在提高效率的同时,也会增大程序的体积,当函数的体积很小的时候,使用内联函数很划算的。在不知道具体情况的时候最好不要用内敛函数
#include<iostream> using namespace std; inline int print(); int print(){ return 1; } inline int func(int); int func(int x){ return x; } int main(){ int x; cout<<"请输入一个数字\n"; cin>>x; cout<<"输出的数字为:"<<func(x)<<endl; cout<<print()<<endl; } |
头文件与源文件
我们可以将类的声明和定义存放在一个文件,一般是后缀为.h的文件,将程序执行的部分也存放在一个文件,一般是.cpp文件,这样就可以在.cpp文件的顶端写下代码使文件.h和.cpp相连:
# include “*.h”,中间的*是你给该文件取得名字
将类的定义和实现部分分开后,一个.h文件可以同时被多个.cpp文件所调用
const成员函数
如果不想让某个成员函数修改成员变量的值,那么就将这个成员函数声明为const
对于不应当改变对象的成员函数都应该声明为const,这样假如该成员函数视图去修改该对象的成员变量,编译器会提示错误
构造函数
在创建某个类的对象时,由于对该对象的状态(数据)不是很明确,因此需要对其进行初始化。
构造函数没有返回值
默认构造函数
如果我们不提供一个构造函数,那么系统会为我们自动创建一个构造函数,该函数什么参数也没有,而且也不会执行任何功能,它的作用只是构造一个对象。
我们可以创建多个构造函数,比如说可以创建一个类似于默认构造函数的不带参数的构造函数,同时也可以创建一个带参数的构造函数。
析构函数
析构函数与构造函数相反,构造函数用于构造一个空间,西沟函数则用于在对象被销毁后清除它所占用的内存空间,比如说它可以清楚由构造函数创建的内存
析构函数和构造函数基本一样,只是多了一个~,析构函数和构造函数都无返回值,析构函数不能有参数,一个类只能有一个析构函数,但是可以析构数组
#include<iostream> using namespace std; class rectangle { public: /*当没有定义构造函数的时候,系统自动为类生成无参数的构造函数*/ rectangle(); ~rectangle(); void func(int x,int y){height=x;width=y;} void print() const{cout<<"长方形的面积是:"<<height*width<<endl;} private: int height; int width; }; rectangle::rectangle() { } /*析构函数用来释放内存空间的*/ rectangle::~rectangle() { } int main(){ rectangle rec; rec.func(2,6); rec.print(); return 0; } |
循环语句-goto
goto语句是最古老的语句,由一个名字加上一个”:”,就成为一个标号,该标号通常被放置在一段可执行的c++语句的左边,也就是i++的左边,通过它后面的goto语句来实现跳转
goto语句是一个转向语句,表示无条件的跳转到标号处
由于goto语句能直接跳到程序的某一处开始执行,因此会导致很多不易察觉的错误,并且是程序结构看上去不那么严密,松散很多
goto语句一旦出了错误,调试起来的话,很困难的,所以一般不用
while语句
当条件为真则执行括号里面的表达式,也就是说一直做到条件不满足才停止的,if语句只会执行一遍
当while的条件为真的时候,则while永无休止的执行下去
continue和break
当程序执行到某处就不再执行后面的语句,回到开始处执行,continue语句不执行它后面的语句
break只是退出循环,并不会退出整个语句
do-while
do不管程序是否满足要求,程序至少会执行一次
switch
当switch语句中如果没有break语句的结束,直到遇到右大括号才结束
总结:
假如想要无条件的跳转到某条语句执行,用goto语句,
假如想要对某种条件进行判断,为真或者为假分别执行不同的语句,用if语句
假如需要检测的条件很多,用if……else 语句
假如对数字或者字符检测并且需要检测的条件又很多,用switch语句,
假如能确定循环次数,用for语句,
假如不能确定循环次数,用while语句
假如循环体中的语句至少要执行一次,那么用do……while语句
最后,continue可以使循环又一次重新开始,而break可以使循环指教结束。
接下来的笔记很重要,进入指针,数组等学习阶段了