一、类

1.访问控制

class student {
int age;//默认私有控制
public:
string name;
double weight;
};

2.成员函数

  • 定义成员函数时,使用::标识函数所属的类
  • 类方法可以访问类的private组件

成员函数声明与普通函数相同,定义时分类外定义和类内定义

类内定义,在类中声明的函数都是默认都是内联函数(加上inline)

#include<iostream>
using namespace std;
class student {
public:
int sum(int a, int b) {
return a + b;
}
}; void main() {
student stu;//创建对象
int a=stu.sum(, );
cout << a << endl;
}

类外定义

#include<iostream>
using namespace std;
class student {
public:
int sum(int a,int b);//函数声明
}; inline int student::sum(int a, int b) {//类外定义
return a + b;
} void main() {
student stu;//创建对象
int a=stu.sum(, );
cout << a << endl;
}

再强调下内联函数的作用:内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,就像整个函数体在调用处被重写了一遍一样。有了内联函数,就能像调用一个函数那样方便地重复使用一段代码,而不需要付出执行函数调用的额外开销。很显然,使用内联函数会使最终可执行程序的体积增加。以时间换取空间,或增加空间消耗来节省时间,这是计算机学科中常用的方法 。

二、构造函数和析构函数

 1.构造函数

为了隐藏数据,并且在创建时进行初始化,创造了构造函数的功能.

(1)使用带参构造函数

#include<iostream>
using namespace std;
class student {
int m_a = ;
int m_b = ;
public:
student() { }//默认构造函数
student(int a, int b) {
m_a = a;
m_b = b;
}//带参构造函数
int sum() {
return m_a + m_b;
};
}; void main() {
student stu1 = student{,};//1.显示调用构造函数
int a1 = stu1.sum();
cout <<"显示调用构造函数 "<< a1 << endl; student stu2 ( , );//2.隐式调用构造函数
int a2= stu2.sum();
cout << "隐式调用构造函数 " << a2 << endl; student *stu3 = new student(, );//3.动态调用构造函数
int a3=stu3->sum();
cout << "动态调用构造函数 " << a3 << endl;
}

(2)默认构造函数

class student {
public:
student() {
cout << "调用构造函数"<< endl;
}
}; void main() {
//调用默认构造函数的几种方式
student stu1;
student stu2= student();
student *stu3 = new student;
}

注意

student stu1();//这是一个返回student对象的函数,而不是构造函数

c++11 列表初始化

student stu1 = { , };

2.析构函数

#include<iostream>
using namespace std;
class student {
public:
student() {
cout << "调用构造函数"<< endl;
}
~student() {
cout << "调用析构函数" << endl;
}
}; void main() {
{
student stu1;//这是一个返回student对象的函数,而不是构造函数
}
}

3.const成员函数 

const成员函数内不运行修改成员属性,被添加mutable的成员函数可以被const函数修改

void sum(int &a,int b) const {//const放在方法的后面,使得该程序下成员函数不能被修改
a = ;
}

const指针修饰的是被隐藏的this指针所指向的内存空间,修饰的是this指针

三、this指针

this指针指向被调用的成员函数所属的对象。

this指针隐含每一个非静态成员函数内的指针。

用途:

  this 同名参数

  类的非静态成员函数中返回对象本身,可用return *this

四、对象数组

五、类作用域

六、抽象数据类型

文件头类声明

(9)C++ 对象和类的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  2. Python-面向对象(类)二

    一.成员修饰符 • 共有成员 • 私有成员 __+字段 __:成员修饰符 无法直接访问,只能通过该成员所属类的方法简介访问 class Foo: def __init__(self, name, ag ...

  3. Python-面向对象(类)一

    一.如何创建类 class cls: pass 二.创建方法 构造方法: __init__(self, arg) obj = 类('a1') 普通方法: obj = 类('xxx') obj.普通方法 ...

  4. CoreJava学习笔记1-基本概念、对象和类

    一.    java的基本程序设计结构 (一)   java共有8种基本类型:4种整型,2种浮点类型,1种char,1种boolean. 1)       4种整型:byte(1).short(2). ...

  5. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

  6. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  7. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  8. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  9. 对于python,一切事物都是对象,对象基于类创建

    新建列表.新建string字符串 li1 = [1, 2, 3, 4] li2 = list([1, 2, 3]) s1 = "abc" s2 = str("abc&qu ...

  10. 使用prototype 对象定义类成员

    使用prototype 对象定义类成员上一节介绍了类的实现机制以及构造函数的实现,现在介绍另一种为类添加成员的机制:prototype 对象.当new 一个function 时,该对象的成员将自动赋给 ...

随机推荐

  1. css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙

    css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙 5 样式 .ceshi{float:left; margin-left:13px; width:180px; ...

  2. charles抓包看性能数据

    1.优化某个接口或加载速度(H5加载速度慢) 抓包看Overview ①看Duration,就是接口的加载时间 ②看Latency,就是延时一端传播到另一端所花费的时间:一般和网络有关:可以综合Dur ...

  3. Android深度探索-卷1第四章心得体会

    这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的 ...

  4. KMP算法——字符匹配

     暴力匹配: 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置, ...

  5. java File I/O

    File类: 常用方法: boolean exists( ):判断文件或目录是否存在 boolean isFile( ):判断是否是文件 boolean isDirectory( ):判断是否是目录 ...

  6. mongo数据库基本查询语句

    D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.-g83c3022fe4 connecting to: mongodb://12 ...

  7. mysqldump 多实例备份

    通过/var/lib/mysql/mysql4406.sock   登录到某一个实例,备份 mysqldump -uroot -p --all-databases --add-drop-databas ...

  8. poj Drainage Ditches(最大流入门)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 85250   Accepted: 3316 ...

  9. 在centos上安装nodejs

    之前在百度云上买了个服务器,选择的centos 64位系统. 买完之后一顿折腾,今天就来讲讲怎么安装node和npm,刚开始在Google上找了好多方法,都是费时.费力,最后还是没有安装成功,下面将介 ...

  10. C#log4net的使用

    一,下载log4net.dll,在项目中添加引用 二,在站点根目录添加,配置文件(log4net.xml), <file value="logs/logfile.txt"/& ...