C++ 类和对象 构造与析构 new delete this指针 const

一、面向对象的特点

抽象、封装、继承、多态

二、类的封装

1.struct和class的区别

    struct定义类时,成员默认属性为public

    class定义类时,成员默认属性为private

2.类的访问控制权限

    public:可在类内和类外被访问

    private:只能在类内被访问

    protected:只能在类内和派生类内被访问

class Circle
{
public:
	void setR(double r)//类的成员函数 设置圆的半径
	{
		m_r = r;
	}
	double getR()//获取圆的半径
	{
		return m_r;
	}
	double getS()//获取圆的面积
	{
		m_s = 3.14 * m_r * m_r;
		return m_s;
	}
private:
	double m_r, m_s;//圆的半径,面积
};


int main()
{
	Circle c1;// 用类来定义变量 我们一般将这个变量叫对象
	c1.setR(10);
	cout << "r=" << c1.getR() << endl;
	cout << "s=" << c1.getS() << endl;
	system("pause");
	return 0;
}

 一般将类的声明放在头文件,类的实现放在源文件

 3.构造与析构

构造函数:是与类名相同的成员函数,定义时可有参数,没有返回值

析构函数:在对象销毁时自动调用。语法:~ClassName()

4.对象初始化与赋值

Test t1(4,5);

Test t2 = Test(5,6); // 对象的初始化,在创建时给值

t2 = t1; // 对象的赋值

5.拷贝构造函数

定义:

classname (const classname &obj)
{
    //调用时用obj.xxx
}

拷贝构造函数的调用时机:

(1)Test t2 = t1; // 用对象 t1 去初始化t2

(2)Test t2(t0); // 用对象 t0 去初始化t2

(3)PrintObj(t0);   // 做函数参数的时候

(4)t1 = test();       // 函数返回值返回对象

6.当类中没有定义构造函数时,C++编译器会提供默认无参构造函数和默认拷贝构造函数。

   先调用成员变量的构造函数,调用顺序与声明顺序相同,再调用自身类的构造函数。

   析构函数调用顺序与对应构造函数顺序相反

三、内存的动态建立和释放 new delete

   new申请空间并调用构造函数初始化指针指向的内容

              指针变量 = new 类型(常量); //常量是初始化值,可缺省。数组不能指定初始值。

              指针变量 = new 类型 [ 表达式 ] ;

   delete释放空间并调用对象的析构函数 

              delete 指针变量 ; //指针变量必须是一个new返回的指针

              delete [ ] 指针变量 ;

例:int *p = new int(3); //开辟一个存放整型数的空间,并指定该实数的初值为3,将返回该空间的地址赋值给指针p

如果执行new运算时内存不足,会返回0指针值。

例:(1)基础类型的空间分配 

int main()
{
	int *p1 = new int(); //常量缺省
	*p1 = 30;
	int *p2 = new int(30); //直接初始化
	cout << "p1 = " << *p1 << endl;
	cout << "p2 = " << *p2 << endl;
	delete p1;
	delete p2;
	system("pause");
	return 0;
}

        (2)数组的空间分配

 

int *p1 = new int[10];
p1[2] = 30;
cout << p1[2] << endl;
delete[] p1; //漏掉[]会造成内存泄漏

          (3) 类对象的空间分配

MyPoint *p = new MyPoint(3, 4);
cout << p->getX() << " " << p->getY();
delete p;

四、静态成员变量和静态成员函数

1.静态成员变量 

static关键字可以说明一个类的成员:static int m_x; 

静态成员必须在类的外部初始化:int MyPoint :: m_x = 10;

MyPoint p1(1, 1);
MyPoint p2(1, 1);
cout << p1.m_z << endl;//静态成员可以直接通过对象访问
p1.m_z = 10;
cout << p2.m_z << endl;//输出10
MyPoint::m_z = 90;//静态成员也可以通过类名访问

2.静态成员函数

 静态成员函数中只能使用静态成员变量,不能使用其他普通成员变量。

static void printC()
{
    cout << m_c << endl;
}
Test::printC();//类名::函数名调用
p1.printC();//用对象调用

五、this指针

在构造函数初始化时:

MyPoint::MyPoint( int x, int y )
{
	this->m_x = x;//相当于m_x = x;
	this->m_y = y;//相当于m_y = y;
}

六、const修饰成员函数 

函数名后面加const,则函数体内部不能改变任何成员变量

int get() const
{
    return i;
}

 

 

 


 

 

 

 

 

 

 

 

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值