对象:
具有类性质的结构的变量。
构造函数用于初始化类的对象。构造函数名与结构名相同,无返回值类型。
class Point
{
private:
doublex;
doubley;
public:
Point(double a=0, double b=0)
{ x=a; y=b;}
}
对象:对象名、属性、操作
类是具有相同 属性和操作的一组对象的集合。
class定义的类的所有成员默认声明为private属性。
公有成员:类成员函数以及该类外对象都能够以正确的方式引用这些共有成员。
私有成员:私有成员只能被类成员函数所访问,而不能被该类或派生类外的对象直接访问。
具有类性质的结构的变量。
构造函数用于初始化类的对象。构造函数名与结构名相同,无返回值类型。
class Point
{
private:
public:
}
对象:对象名、属性、操作
类是具有相同 属性和操作的一组对象的集合。
class定义的类的所有成员默认声明为private属性。
公有成员:类成员函数以及该类外对象都能够以正确的方式引用这些共有成员。
私有成员:私有成员只能被类成员函数所访问,而不能被该类或派生类外的对象直接访问。
保护成员年:保护成员只能被该类极其派生类的成员函数所访问,不能被该类或派生类外的对象直接访问。
构造函数不需要用户来调用,是在建立对象时自动执行的。
声明:
类名(类型1 形参1, 类型2 形参2,...);
在一个类中可以定义多个构造函数。
定义对象时传递参数给构造函数:
类名 对象名(实参1,实参2,...);
Point t1(1, 2);
如果没有定义构造函数,则c++会自动生成一个函数体为空的构造函数。
函数参数初始化表:
类名(类型1 形参1, 类型2 形参2,...):数据成员1(参数表1), 数据成员2(参数表2),...{}
Time(double a=0, double b=0):x(a), y(b){}
析构函数:
声明格式:
~类名()
如:
~Point()
{printf( "%d %d", x, y); }
执行顺序:
new动态分配对象执行析构函数按照delete释放动态对象的顺序,先释放先执行。
一般情况下,析构函数的执行顺序和构造函数的执行顺序相反。
析构函数没有返回值与函数参数。
复制构造函数:
用法:
Point s1(1, 2);
Point s2(s1); //s1数据成员赋给s1
声明:
类名(const 类名 & 源对象)
如:
Point(const Point ©)
{;}
在涉及到指针类型的复制时,复制构造函数定义后可规避指针引用错误。
const应用:
常数据成员:
只能通过 构造函数的参数初始化表进行初始化。
常成员函数:
只能引用本类中的数据成员,而 不能修改他们。
常成员函数的函数体中只能调用常成员函数。
如:
声明:void Show() const;
定义:void Point::Show() const{ cout<< x<< y<<endl;}
常对象:
常对象只能调用常成员函数,非常对象既可以调用非常成员函数,也可以调用常成员函数。
函数名与形参表完全相同的 常成员函数与 非常成员函数可以进行重载,非常对象优先调用非常成员函数。
mutable修饰的常对象中的某个数据成员的值能被 常成员函数或其他表达式修改
用常引用作函数参数,可以提高程序运行效率。
友元函数:
声明:
friend 返回值类型 函数名(形参表);
如:
声明:friend void Show(const Data &dt);
定义:void Show(const Data &dt) {cout<< endl;}
静态成员:
静态数据成员被该类的所有对象共享,无论建立多少个该类的对象,都只有 一个静态数据成员的存储空间。
静态数据成员 属于类,而 不属于对象。访问方式为:类名::静态数据成员名
类的静态数据成员必须在 类外进行初始化:
类型名 类名::静态数据成员名=初始值
如果只声明了类而未定义对象,将为静态数据成员分配存储空间,但对类的非静态数据成员不分配存储空间,只有定义对象后,才为对象的非静态数据成员分配空间。
输出:
静态成员函数只属于类。
静态成员函数 只能直接引用静态数据成员,而 不能直接引用非静态数据成员。
this指针:
创建对象时,值初始化为该对象的地址。
由于静态静态成员函数是类的一部分,而不是对象的一部分,因此 静态成员函数内不含this隐含指针。(在静态函数中不能调用this指针)
类的数据成员不能在声明类时进行初始化。
析构函数:
声明格式:
~类名()
如:
~Point()
{printf( "%d %d", x, y); }
执行顺序:
new动态分配对象执行析构函数按照delete释放动态对象的顺序,先释放先执行。
一般情况下,析构函数的执行顺序和构造函数的执行顺序相反。
析构函数没有返回值与函数参数。
复制构造函数:
用法:
Point s1(1, 2);
Point s2(s1); //s1数据成员赋给s1
声明:
类名(const 类名 & 源对象)
如:
Point(const Point ©)
{;}
在涉及到指针类型的复制时,复制构造函数定义后可规避指针引用错误。
const应用:
常数据成员:
只能通过 构造函数的参数初始化表进行初始化。
常成员函数:
只能引用本类中的数据成员,而 不能修改他们。
常成员函数的函数体中只能调用常成员函数。
如:
声明:void Show() const;
定义:void Point::Show() const{ cout<< x<< y<<endl;}
常对象:
常对象只能调用常成员函数,非常对象既可以调用非常成员函数,也可以调用常成员函数。
函数名与形参表完全相同的 常成员函数与 非常成员函数可以进行重载,非常对象优先调用非常成员函数。
mutable修饰的常对象中的某个数据成员的值能被 常成员函数或其他表达式修改
用常引用作函数参数,可以提高程序运行效率。
友元函数:
声明:
friend 返回值类型 函数名(形参表);
如:
声明:friend void Show(const Data &dt);
定义:void Show(const Data &dt) {cout<< endl;}
静态成员:
静态数据成员被该类的所有对象共享,无论建立多少个该类的对象,都只有 一个静态数据成员的存储空间。
静态数据成员 属于类,而 不属于对象。访问方式为:类名::静态数据成员名
类的静态数据成员必须在 类外进行初始化:
类型名 类名::静态数据成员名=初始值
如果只声明了类而未定义对象,将为静态数据成员分配存储空间,但对类的非静态数据成员不分配存储空间,只有定义对象后,才为对象的非静态数据成员分配空间。
#include <iostream>
#include <cstdio>
using namespace std;
class Test {
public:
static int a;
void init() {
cout<< a<< 2<< endl;
a = 5;
cout<< a<< 3<< endl;
}
Test(int a = 6) { //这里int a = 6的a覆盖static int a,去掉int a = 6就使函数体中的a为static int a中的a
cout<< a<< 1<< endl;
init();
cout<< a<< 4<< endl;
a++;
cout<< a<< 5<< endl;
}
};
int Test::a=0;
Test obj;
int main(void)
{
cout<< obj.a<< endl;
return(0);
}
输出:
61
02
53
64
75
5 //对结果起作用的是init函数
静态成员函数只属于类。
静态成员函数 只能直接引用静态数据成员,而 不能直接引用非静态数据成员。
this指针:
创建对象时,值初始化为该对象的地址。
由于静态静态成员函数是类的一部分,而不是对象的一部分,因此 静态成员函数内不含this隐含指针。(在静态函数中不能调用this指针)
类的数据成员不能在声明类时进行初始化。