前言
C++学习,类
一、类的表示
示例:一个钟表的类
class Clock{
public:
void setTime(int newT,int newM,int newS);
void showTime();
private:
int hour,minute,second;
};
可以看到在C++中,一般默认将类名(Clock)首字母大写,且在一个类中含有public和private。其中public为公有成员,private为私有成员。一般的可以认为public中的成员函数为调用该类的一个接口,任何外部函数都可以通过调用public中的声明来得到相应private中的元素的各种情况。我认为比如说有一个类
class 不知道啥类{
public:
一个成员函数();
private:
element;
};
不知道啥类::一个成员函数(){
return f(element)
}
不知道啥类.一个成员函数() 得到element 的一个映射
但是外部函数不能直接访问private中的值。
在一开始提到的Clock类中,可以进一步完善
#include<iostream>;
class Clock{
public:
void setTime(int newT = 0,int newM = 0,int newS = 0);//可以在类中直接进行实例化,避免代码运行
//忘记实例化产生错误
//当然也可以在main函数中进行实例化
void showTime();
private:
int hour,minute,second;//只能内部函数访问
};
void Clock::setTime(int newT ,int newM ,int newS){
hour = newT;
minute = newM;
second = newS;
}//写成员函数和一般函数要求差不多,括号内都是参数{不要带上实例化时的数字!}
void Clock::showTime(){
cout<<hour<<':'<<minute<<':'<<second<<endl;
}
int main(){
Clock myClock;//和一切数据类型一样,class新给定一个数据类型,作为它的变量就要进行
//变量声明
myClock.setTime(1,2,3);//因为在类中已经有了实例化,可以重新赋予初始值或直接跳过;
myClock.showTime();
return 0;
}
二、类的特殊函数
1.构造函数
简单来说就是:构造函数的创造使类进行一波初始化的操作
默认的构造函数他的参数列表是空的
构造函数在调用类时自动运行
构造函数位于public中
class Clock{
public:
Clock(int newT,int newM,int newS);//构造函数与类同名
void setTime(int newT,int newM,int newS);
void showTime();
private:
int hour,minute,second;
};
Clock::Clock(int newT,int newM,int newS){
hour = newT;
minute = newM;
second = newS;
}//给private中的值有一个初始化的操作,调用类的时候会自动运行
Clock myclock(1,2,3);//写了构造函数,那么就要在变量声明中将变量实例化
2.析构函数
析构函数一般没有参数;
析构函数主要是用来在程序结束后释放掉类所占的内存的;
默认构建一个类存在一个析构函数;
也是自动调用
class Clock{
public:
Clock(int a,int b,int c);
void setTime(int a,int b,int c);
void showTime();
~Clock();
private:
int hour,minute,second;
}
Clock::~Clock(){};
3.复制构造函数
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:
通过使用另一个同类型的对象来初始化新创建的对象。
复制对象把它作为参数传递给函数。
复制对象,并从函数返回这个对象。
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数(会遇到深拷贝和浅拷贝的问题!)
class Clock{
public:
Clock(int a,int b,int c);
Clock(const Clock &obj);
void setTime(int a,int b,int c);
void showTime();
private:
int hour,minute,second;
};
Clock::Clock(const Clock &obj){
hour = obj.hour;
minute = obj.minute;
second = obj.second;
}//就类似于将原来的已经调试过的一个对象的private全部复制给新的对象