来自:黄邦勇帅

const 常量对象:

  即把对象声明为常量,即 const hyong m,常量对象不能调用可能改变对象的值的函数,因此常量对象只能调用类中的 const 常量函数,因为不是 const 的函数都有可能改变对象的值。

  常量对象可以调用类中的公有成员,如 m.a 就是正确的如果 a 是公有的。

  不能对常量对象的公有成员重新赋值,如 m.a=3 就是错误的。但可以对类中的公有静态成员变量重新赋值,因为静态成员变是不属于这个常量对象,他是属于整个类的。

对象数组:

  对象数组即数组中的每个成员都是一个对象,例如 hyong a[3];其中 a[0],a[1],a[2]都是一个 hyong 类型的对象。

  对象数组的初始化,如果有默认构造函数则语句 hyong a[3]将调用默认构造函数初始化 3 个对象;

  如果对象数组带有一个参数的构造函数则可以这样初始化 hyong a[3]={1,2,3};

  如果对象数组带有多个参数的构造函数,则初始化方法为 hyong a[3]={hyong(1,2),hyong(3,4),hyong(4,5)}。

类中的对象成员:

  即把对象作为另一个类的成员。比如 class B{public: A x;}

  如果要用带参数的构造函数初始化x, 必须用初始化列表初始化

例子:

#include <iostream>
using namespace std; class A
{
public:
int a, b;
A()
{
a = b = ;
cout << "A 默认构造函数" << endl;
}
A(int i)
{
a = b = i;
cout << "A 一个参数的构造函数" << endl;
}
A(int i, int j)
{
a = i;
b = j;
cout << "A 两个参数的构造函数" << endl;
}
}; class B
{
public:
int a, b;
A x;
B()
{
a = b = ;
cout << "B 默认构造函数" << endl;
}
B(int i)
{
a = b = i;
cout << "B 一个参数的构造函数" << endl;
}
B(int i, int j);
}; B::B(int i, int j):a(i), b(j), x(A(,)){} //用含参数的构造函数初始化成员,用初始化列表 int main()
{
A m;
cout << "---------------" << endl;
B n;
cout << "---------------" << endl;
B n1(, );
cout << "---------------" << endl;
n.x = A(, );
cout << "---------------" << endl;
cout << n.x.a << n.x.b << endl; return ;
}

如果不用初始化列表,在构造函数里用两个变量的构造函数给x赋值,结果是

#include <iostream>
using namespace std; class A
{
public:
int a, b;
A()
{
a = b = ;
cout << "A 默认构造函数" << endl;
}
A(int i, int j)
{
a = i;
b = j;
cout << "A 两个参数的构造函数" << endl;
}
}; class B
{
public:
int a, b;
A x;
B()
{
a = b = ;
x = A(,); //这里已经不是初始化了。而是重新赋值。
//先用A的默认构造函数生成了x, 这里又用A(1,2)构造了一个临时变量,通过赋值函数将临时变量赋给了x
cout << "B 默认构造函数" << endl;
}
}; int main()
{
B n;
return ;
}

类成员指针

  1.声明类成员指针的方式为:int hyong::*p1 声明了一个指向类中整型成员的指针 p1。 int (hyong::*p2)()注意括号,声明一个指向反回类型为 int 的无参数的函数的指针 p2

  2.类成员指针即指向类中成员的指针注意是直接指向类中的成员而不是指向对象的某一成员的指针, 即与指针 p=&m.a是不一样的。

    类成员指针提供的是成员在类中的对象的偏移量,不是一个真正的指针。

    因为不是一个真正的指针所以不能通过指针来访问类中的成员,而只能通过特殊的运算符.*或->*来访问指针指向的成员。

    比如*p1=2 ,hyong::*p1=2 是错误的,不能对类成员指针指向的类成员直接赋值。cout<<*p1<<hyong::*p1 也是错误的,不能直接用类成员指针来访问类中的成员。

【C++】各种成员变量的更多相关文章

  1. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  2. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

  3. java面向对象---成员变量和成员函数

    //成员变量 1.类定义了对象中所具有的变量,这些变量称作成员变量 2.每个对象都有自己的变量,和同一个类的其他对象的分开的 //函数与成员变量 1.在函数中可以直接写成员变量的名字来访问成员变量,那 ...

  4. runtime-对成员变量操作应用之归档和返归档

    为了实现归档和返归档,我们要让被归档对象的类接受NSCoding协议并且实现协议里的两个方法 - (void)encodeWithCoder:(NSCoder *)aCoder; - (nullabl ...

  5. runtime-对成员变量和属性的操作

    成员变量 首先我们来看看成员变量在runtime中是什么样的 在runtime中成员变量是一个objc_ivar类型的结构体,结构体定义如下 struct objc_ivar { char *ivar ...

  6. runtime第二部分成员变量和属性

    接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http:/ ...

  7. iOS 局部变量 全局变量 成员变量

    一.成员变量 : 写在类声明的大括号中的变量叫成员变量 (也叫属性/实例变量) 成员变量不可离开类 离开了类就不是成员变量 成员变量不能再定义的同事初始化 成员量只能通过对象来访问 成员变量存储在堆中 ...

  8. java接口中定义成员变量

    //抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...

  9. Java易混淆的概率:成员变量、类变量、实例变量、局部变量

    先看代码 public class Variable{ int b=0; //实例变量 static int a=0; //类变量 final String c="wws"; // ...

  10. [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

    在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.

随机推荐

  1. lintcode-83-落单的数 II

    83-落单的数 II 给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字. 样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4 挑战 一次遍历,常数级 ...

  2. PAT 1030 完美数列

    https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224 给定一个正整数数列,和正整数 p,设这个数列 ...

  3. C# 利用WMI对象获取物理内存和可用内存大小

    下面的代码演示的是使用WMI对象可获取取物理内存和可用内存大小,在使用WMI对象前,先要添加对System.Management的引用,然后就可以调用WMI对象,代码如下: //获取总物理内存大小 M ...

  4. [剑指Offer] 30.连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  5. ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现

    ElasticSearch 中文同义词实现 https://blog.csdn.net/xsdxs/article/details/52806499 参考以下两个网址,但运行报错,以下是我自己改进方式 ...

  6. 【bzoj4548】小奇的糖果 STL-set+树状数组

    题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...

  7. Web.config配置文件中的属性add,key,value含义

    这是添加自定义字符串的方式,保存是以键-值的形式保存的,可以通过key获取value,一般用这种方法配置全局内使用的字符串. <configuration>是配置文件的根配置节. < ...

  8. [转载] Win7下MATLAB 7.0下载地址和详细安装

    移步http://blog.csdn.net/feecooling/article/details/7525140 MATLAB中文手册命令汇总http://wenku.baidu.com/view/ ...

  9. 制作Windows10政府版的小白教程

    制作Windows10政府版的小白教程 https://03k.org/make10entg.html 首先,宿主系统要比操作的系统新,因为低版本dism操作不了: 当然也可以单独下载ADK,提取最新 ...

  10. 安全警告——“Windows已经阻止此软件因为无法验证发行者”解决办法

    步骤:打开IE工具-->Internet选项-->安全-->自定义级别 -->找到ActiveX 控件和插件,按照图里进行配置.