前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类和对象的基础

类和对象的基础

作者头像
废江_小江
发布2022-09-05 13:26:07
3860
发布2022-09-05 13:26:07
举报
文章被收录于专栏:总栏目

#内联函数,重载函数,缺省函数 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.如果定义了析构函数,则编译器不在生成缺省析构函数

17db177f7966b6c79861f03340bc6306.png
17db177f7966b6c79861f03340bc6306.png
代码语言:javascript
复制
#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(){...} 

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

代码语言:javascript
复制
#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协议进行授权 转载请注明原文链接:类和对象的基础

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-02),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 析构函数和构造函数的应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档