• 欢迎访问废江's博客 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧

类和对象的基础

c++ 站点默认 3个月前 (01-02) 34次浏览 已收录 0个评论

#内联函数,重载函数,缺省函数
1.为了提高效率,可以在函数定义时候前面加上inline即可以将函数改为内涵函数
2.重载函数,函数名字可以相同,在调用的时候保证没有二义性即可
3.声明函数的时候就可以位函数的形参赋值,这样的函数叫做缺省函数

#c++类和对象的基本概念
类成员的可访问范围(在类的定义中)
*private* :私有成员,只能在成员函数内访问
>私有成员的特点,只能在类里面访问(主函数中试图访问是错误的),目的是强制对成员变量的访问一定要通过成员函数进行,
那么以后成员变量的类型等属性修改后,只需要更改成员函数即可。否则,所以直接访问成员变量的语句
都需要修改
*public*: 公有成员,可以在任何地方访问
*protected*:保护成员
(如果某个成员前面没有关键字,则缺省被认为是私有成员)

#构造函数
1.名字与类名相同,可以有参数,不能有返回值
2.作用是对对象进行初始化,如给成员变量赋值
3.如给定义类时没有写构造函数,则编译器会生成一个默认的无参数的构造函数
4.*对象生成的时候构造函数自动被调用。对象一旦生成,再也不能在其上执行构造函数
5.一个类可以有多个构造函数

#赋值构造函数
1.只有一个参数,即对同类对象的引用
2.x::x(const x&)*关于const,如果希望确保实参的值在函数中不应被改变,则可以加上关键字const
3.如给没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能
**赋值构造函数**起作用的三种情况
1.当用一个对象去初始化同类的另一个对象
2.如果某函数有一个参数是类a的对象,那么该函数被调用时,类a的复制构造函数将被调用
3.如果函数的返回值是类a的对象时,则函数返回时,a的复制构造函数将被调用
注意:当对象赋值并不导致复制构造函数被调用

#类型转换构造函数
1.目的是实现类型的自动转换
2.只有一个参数,并且不是复制构造函数的构造函数,一般就可以看作是转换构造函数
3.当需要的时候,编译系统会自动调用转换构造函数,建立一个无名的临时对象

#析构函数
1.名字与类名相同,在前面加~,没有参数和返回值,一个类最多只有一个析构函数
2.析构函数对象消亡时即自动被调用,可以定义析构函数来在对象消亡前做善后工作,比如释放分配的空间
3.如果定义类时没有写析构函数,则编译器会生成缺省的析构函数,缺省析构函数什么也不做
4.如果定义了析构函数,则编译器不在生成缺省析构函数
17db177f7966b6c79861f03340bc++6306.png

#include<iostream>
using namespace std;
class crectangle{
	public:
		int w,h;//成员变量
		int area(){
			return w*h;//求面积的成员函数 
		}
		int perimeter(){
			return 2*(w+h);//求周长的成员函数 
		}
		void init(int w_,int h_){ //初始化函数 
			w=w_;h=h_;
		}
		crectangle(int w_,int h_){//构造函数 
			w=w_;h=h_;
		}
		crectangle(){  //也是一个构造函数,重载构造函数,目的当声明对象不带参数时候,编译器自动调用它 
			cout<<"1"<<endl;
		}
		crectangle(const crectangle &r){  //复制构造函数 
			w=r.w;h=r.h;
			cout<<"copy constructor called"<<endl;
		}
};//一个关于矩形的对象定义完成 
int main(){
	int w,h;
	cin>>w>>h;
	crectangle r(w,h);//r是一个对象
	r.init(w,h);//调用初始化函数对其进行初始化
	cout<<r.area()<<endl<<r.perimeter();
//	return 0;
	cout<<endl;
//通过类,可以定义变量。对象的内存的分配:和结构变量一样
//对象占用的内存空间的大小等于所以成员变量的大小之和 
//访问对面的成员名,1 直接使用.访问
//2. 用class类名声明一个指针,crectangle *p= &r  p->w 可以直接访问  
//3. 引用访问  crectangle &rr=r  rr.w就可以直接访问 
	crectangle r2;
	crectangle r3[2]={{3,4}};
	crectangle r4(r2);//调用复制构造函数 ,r4对象是r2的一个复制品 
}
//类的成员函数可以放到外面来写
//例如 int crectangle::rear(){...} 

析构函数和构造函数的应用

#include<iostream>
using namespace std;
//构造函数和析构函数的应用实例 
class demo{
	int id;//私有成员
	public:
	demo(int i){ //类型转换构造函数 
		id=i;
		cout<<"id="<<id<<"构造函数"<<endl;
	}
	~demo(){//析构函数
		cout<<"id="<<id<<"析构函数"<<endl; 
	} 
};
demo d1(1);//全局变量声明了d1对象 
void fun(){
	static demo d2(2);//静态局部变量(在函数结束时候,变量不消亡) 
	demo d3(3);
	cout<<"func"<<endl;
} 
int main(){
	demo d4(4);
	d4=6;
	cout<<"main"<<endl;
	{
		demo d5(5);//这是一个局部变量, 大括号结束,局部变量消亡 
	}
	fun();
	cout<<"main ends"<<endl;
	return 0;
} 

个人博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:类和对象的基础
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到