C++ 类、对象、class

一、对象初始化

1.不能在类声明中对数据成员初始化,因为类只是一个抽象类型,不占存储空间,无处容纳数据。

2.若某类的数据成员都是public,则可以像结构体一样初始化,如

   Time t={12,21,04};

   若数据成员有private或protected则不能这样初始化。

3.构造函数没有返回值,不需要用户调用,也无法被用户调用。

4.带参数的构造函数初始化格式:类名 对象名(实参1,实参2...)

5.构造函数的参数初始化列表格式:

类名::构造函数名(若干参数):初始化表{}

Student ::stu(x,y):stuNum(x),name(y){}

6.在类内声明构造函数时就可以指定默认参数,如

Box(int h=10,int w=10,int l=10)或Box()

默认构造函数要么无参,要么指定全部参数,一个类只能有一个默认构造函数,若定义了全参默认构造函数,则不能再重载构造函数,应该在声明构造函数时指定默认值,不能在定义时指定,若构造函数的全部参数都指定了默认值,则创建对象是可以给出任意个实参,也可以不给。

7.this指针指向对象,它的值是当前被调用的成员函数所在的对象的起始地址。

二、析构函数

1.用new动态创建对象,delete时会调用析构函数。析构函数只能有一个,用来执行“用户希望在最后一次使用对象之后所执行的任何操作”。

2.先构造的对象后析构,相当于栈。

三、对象数组

1.若构造函数只有一个参数,则可进行如下定义:Student stu[3]={5,8,12},三个参数分别给三个构造函数;

2.若构造函数不止一个参数,则亦可用上述方式定义,其中三个参数分别称为三个构造函数的第一个参数,但最好不要用上述方式来定义,因为会歧义(在vs2015中直接连编译都没通过)。应该用如下方式来定义:

Student stu[3]={Student(1,2,3),Student(11,12,13),Student(21,22,23)};

四、对象指针

1.指向普通函数的指针:

假设现有一函数

int haha(int i,char c)
{
    //xxxxxxx
}

要通过指针来调用该函数,则先声明指针:

int (*p)(int i, char c);

再让指针指向函数:
p = haha或者p = &haha也行;

即可通过指针调用函数了,如:
(*p)(1, 'w');

2.指向成员函数的指针:

与普通指针函数相比,声明指针要加上类限制:int(Student::*p)(int i, char c);

定义指针也得加上类限制:p = &Student::haha,而且&不可省略。

用指针调用函数时必须通过对象:(stu.*p)(1, 'w');

五、共用数据保护

1.常对象:Time const t(1,2,3);或const Time t(1,2,3);定义时必须初始化,然后数据成员无法被修改。常对象只能调用常成员函数。

2.常成员函数:函数声明时最后要加上const,如:void haha()const;

常成员函数可以访问对象中数据成员,但不能修改。

3.若一定要修改常对象的某个数据成员,应该用关键字mutable,如:mutable int count;也只能通过常成员函数来修改。

4.常数据成员:只能通过构造函数的参数初始化表来初始化,并不能被更改。

六、对象动态建立、释放

1.一般的对象空间都不能随时释放,比如Student stu这样的,只能是在函数调用结束之类的时候被动释放。

2.new、delete就可以随时开辟、撤销空间,所以称为动态的。

七、静态成员

1.静态数据成员:是一个类的成员而不是某个对象的成员,一个类的所有对象都可以引用这个成员,是共用的,值都是一样的,如果改变值,则对所有对象来说这个值都会变,这样比较节省空间。即使不定义对象,也可以引用类的静态数据成员(用类名),也可以通过对象引用。不能用构造函数来初始化,只能在类外初始化。

如,static int a;

2.静态成员函数:性质和静态数据成员一样。调用一个对象的普通成员函数后,会将该对象的首地址赋给this指针,但静态成员函数没有this指针,不能访问非静态数据成员,只能访问静态数据成员。如果指定了对象,其实也是可以访问非静态数据成员的,但是一般不建议这么用。

如static int add();

八、类模板

1.有时多个类的功能相同,仅仅是数据类型不同,为了省去重复工作的麻烦,就可以用模板类。类模板是类的抽象,类是类模板的实例。

2.成员函数定义在类定义内:

template <class haha>//haha为数据类型

class hehe//hehe不是类名,是类模板名

{

private:

    haha x;

    haha y;

public:

    hehe(haha a,haha b)

    {

        x=a;

        y=b;

    }

    haha max()

    {

        return (x>y)?x:y;

    }

}

使用时:hehe <int> hh(4,5);//此处int代替了上面的haha

3.成员函数定义在类定义外:则应该

template <class haha>//haha为数据类型

haha hehe<haha>:: max()

{

    return (x>y)?x:y;

}

九、其他特性

1.c++是基于过程和面向对象的混合型语言。基于过程的程序主要是面对函数,只要设计一个个函数就行了。面向对象的程序主要是类,函数基本都在类内,所以主要是设计类。

2.基于过程的程序=算法+数据结构;

面向对象的程序=对象+消息=算法+数据结构+消息

3.定义类时一般先public后private。

4.c++也可以用struct关键字来定义类,与class唯一的区别就是struct默认为private。不推荐用struct。

5.在类定义内定义的成员函数,若不包括循环等结构,c++系统会自动将其作为inline函数。类外定义的成员函数就没有这个待遇了,必须要写上inline关键字才能成为内联函数。

6.函数的声明和定义只要有一个inline关键字就够了。

7.sizeof一个类时,返回值是这个类中数据成员的大小,跟成员函数无关,若没有数据成员则返回1。

8.一个类至少有一个public成员函数,负责就没有对外的接口,无法对对象进行操作。

转载于:https://www.cnblogs.com/chakyu/p/7412205.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 富文本

参考链接&#xff1a;http://www.ceeger.com/Manual/StyledText.html 首先要说的是不仅仅ugui的text组件支持富文本&#xff0c;Debug.Log也是支持的 Debug.Log("<color#ffff00ff><b>爱生活</b></color> <color#00ffffff><b> 爱海澜&…

Web项目替换jar包中的文件的方法

经常遇到这样的问题&#xff0c;需要修改jar包中的方法。应该如何做&#xff1f; 1、有些很人性化的框架jar包&#xff0c;比如SpringSecurity&#xff0c;可以修改配置文件指定一个新建的类&#xff0c;让类实现Jar包中的对应的接口就好了。 2、大部分的jar包都不会有这么方便…

程序员技术练级攻略

导读&#xff1a;本文是由陈皓和他的一位朋友Mailper合作完成&#xff0c;原名叫《Build Your Programming Technical Skills》&#xff0c;本文分享了Mailper和作者个人的学习经历。每个程序员都希望自己能顺利的升级到高的层次&#xff0c;您不妨按照下面的方法去做。 前言 你…

Linux shell 之 提取文件名和目录名的一些方法

很多时候在使用Linux的shell时&#xff0c;我们都需要对文件名或目录名进行处理&#xff0c;通常的操作是由路径中提取出文件名&#xff0c;从路径中提取出目录名&#xff0c;提取文件后缀名等等。例如&#xff0c;从路径/dir1/dir2/file.txt中提取也文件名file.txt&#xff0c…

bzoj 2752: [HAOI2012]高速公路(road)

Description Y901高速公路是一条重要的交通纽带&#xff0c;政府部门建设初期的投入以及使用期间的养护费用都不低&#xff0c;因此政府在这条高速公路上设立了许多收费站。Y901高速公路是一条由N-1段路以及N个收费站组成的东西向的链&#xff0c;我们按照由西向东的顺序将收费…

搭建DNS主、从服务实验

此次我们的口号是&#xff1a;简单、有趣上手DNS服务博主是一个言出必行de好人&#xff0c;&#xff08;正经脸&#xff09;上次转载了有关DNS的基础介绍&#xff0c;此次我们来通过实验搭建DNS服务器从而更好的了解DNS搭建过程如何开始&#xff0c;且听我细细道来首先我们通常…

GDB中应该知道的几个调试方法

七、八年前写过一篇《用GDB调试程序》&#xff0c;于是&#xff0c;从那以后&#xff0c;很多朋友在MSN上以及给我发邮件询问我关于GDB的问题&#xff0c;一直到今天&#xff0c;还有人在问GDB的相关问题。这么多年来&#xff0c;有一些问题是大家反复在问的&#xff0c;一方面…

长沙java技术_长沙如何提高自身的Java技术

长沙如何提高自身的Java技术&#xff1f;Java自发行二十多年来&#xff0c;一直都是开发者的宠儿&#xff0c;在编程界的位置一直十分稳固。虽然Java人才需求量大&#xff0c;薪资水平高&#xff0c;但想要用Java语言胜任企业工作不容易。比如要成为一名Java架构师&#xff0c;…

strcpy与strcat函数原型

1.strcpy函数原型 char *my_strcpy(char *dest,const char *src) //const使在函数中不能修改*src其原先的值{   char *strDest dest; //保存原始的strDest   assert((dest!NULL)&&(src!NULL)); //检验参数&#xff0c;…

CCF 201312-4 有趣的数

试题编号&#xff1a;201312-4试题名称&#xff1a;有趣的数时间限制&#xff1a;1.0s内存限制&#xff1a;256.0MB问题描述&#xff1a; 问题描述我们把一个数称为有趣的&#xff0c;当且仅当&#xff1a;1. 它的数字只包含0, 1, 2, 3&#xff0c;且这四个数字都出现过至少一次…

java 代码重用_Java 代码重用:功能与上下文重用

我几乎不需要讨论为什么重用代码是有利的。代码重用通常使得程序开发更加快速&#xff0c;并使得 BUG 减少。一旦一段代码被封装和重用&#xff0c;那么只需要检查很少的一段代码即可确保程序的正确性。如果在整个应用程序中只需要在一个地方打开和关闭数据库连接&#xff0c;那…

GCC-3.4.6源代码学习笔记

大约4年前&#xff0c;我加入了GDNT - 北电网络在中国的合资企业&#xff0c;参与3G UMTS无线接入网的研发工作。与GCC有了第一次亲密的接触&#xff08;之前使用的是MS的VC&#xff09;。彼时&#xff0c;北电在其诸如&#xff0c;UMTS、CDMA、及自行开发的众多工具等项目中&a…

互联网

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/3127489/blog/1550726

GCC笔记 命令行分析

1984年&#xff0c;Richard Stallman发起了自由软件运动&#xff0c;GNU (Gnus Not Unix)项目应运而生&#xff0c;3年后&#xff0c;最初版的GCC横空出世&#xff0c;成为第一款可移植、可优化、支持ANSI C的开源C编译器。GCC最初的全名是GNU C Compiler,之后&#xff0c;随着…

java 反射用法_Java 反射的概念与使用

一&#xff0c;反射的概念对于一个人来说&#xff0c;了解自己的能力、本事、特点&#xff0c;对于他去干事创业来说&#xff0c;是很重要的。同样的&#xff0c;对于一门面向对象的语言来说&#xff0c;了解类(对象其实就是类的实现)本身也是重要的&#xff0c;可以在很多地方…

关于Unity中的Mesh Collider碰撞器

原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件&#xff0c;一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件&#xff0c;主角可以放在平面上。 在导入场景后&#xff0c;隐藏平面Plane&#xff0c;给一个地板添加一个Mesh Collider碰撞器&#…

GCC常用选项使用详解

通常所说的GCC是GUN Compiler Collection的简称&#xff0c;除了编译程序之外&#xff0c;它还含其他相关工具&#xff0c;所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序&#xff0c;它是Linux平台编译…

java 井字棋 人机_井字游戏 人机对战 java实现

package com.ecnu.Main;/*** 主函数触发游戏*/public class MainApplication {public static void main(String[] args){TicTacToeGame ticTacToeGame new TicTacToeGame();ticTacToeGame.start();}}//TicTacToeGame 方法类import java.util.Scanner;public class TicTacToeGa…

Session(数据)共享的前后端分离Shiro实战

1&#xff0c;前言本文期望描述如何使用Shiro构建基本的安全登录和权限验证。本文实战场景有如下特殊需求&#xff1a;1&#xff0c;在集群和分布式环境实现session共享&#xff1b;2&#xff0c;前端只使用HTML/CSS/JS。因此无法直接使用Shiro提供的SessionManager&#xff0c…

读书笔记(javascript 高级程序设计)

一. 数据类型&#xff1a; 1. undefined&#xff1a; 未声明和未初始化的变量&#xff0c;typeof 操作符返回的结果都是 undefined&#xff1b;&#xff08;建议未初始化的变量进行显式赋值&#xff0c;这样当 typeof 返回 undefined 时就知道是未声明了&#xff0c;帮助定位问…