1、构造函数
特征:
- 和类名完全相同
- 没有返回值
- 可以带参数,也可以没有(默认构造函数)
- 必须是(public)公有类型:创建对象会自动调用构造函数,如果不是 public,对象不会创建成功
作用:
对创建出的对象进行初始化 ,给对象属性赋初值(开辟空间,初始化)
特点:
- 不会被显示调用,构造函数在对象创建的时候自动调用
- 总是返回一个类的对象
- 当自定义了一个构造函数时。编译器将不会提供默认构造函数(无参)
- 创建对象时,有几个参数,就自动调用带有几个形参的构造函数
2、const
1)C变量
被修饰的变量不能改变
2)C指针:
指针常量:指针指向不能变,指向变量的值可以改变 , char *const p;
常量指针:指针指向可以改变,指向的值不能变 const char *p;
3)C++中const主要存在的三个位置
const int func( const int a) const
- const 返回值:修饰返回值是一个常量(只读,不能更改)
- const 形参:修饰形参为只读对象
- 函数末尾的const:用于修饰成员函数(函数体内不能修改成员变量的值)
//非const成员函数既可以调用const成员函数,也可以调用非const成员函数
p1.print(); //void print() const
p1.getName(); // char *getName()
//const 对象只能调用const成员函数,不能调用非const成员函数
p4.getName(); //error
p4.print();
//非const类型对象既可以赋值给const类型引用,也可以赋值给非const类型引用(指针一样)
const Person &pt1 = p1; //常引用不能做修改,用法和const类型对象一样
Person &pt2 = p1;
//const类型对象只能赋值给const类型引用,不能赋值给非const类型引用
const Person &pt4 = p4;
Person &pt3 = p4; error
3、const成员变量和成员函数(常成员函数)
1)const成员变量
const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表
2)const成员函数
- const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值
- 通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以
get
开头,后跟成员变量的名字,所以通常将它们称为 get 函数 - 常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
class Student
{
public:
Student(char *name, int age);
void show(); //声明常成员函数
char *getname() const;
int getage() const;
private:
char *m_name; int m_age;
};
Student::Student(char *name, int age): m_name(name), m_age(age){ }
void Student::show()
{
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
//定义常成员函数
char * Student::getname() const
{
return m_name;
}
int Student::getage() const
{
return m_age;
}
//const的对象,不能调用非const的成员函数
const student stu;
stu.show(); //错误
const 的位置:
- 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改
- 例如
const char* getname()
- 函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值
- 例如
char * getname() const