C++类中const一些用法

在类中的const基本有三种用法

const int func(); // 返回值是const类型

int func(const int); // 参数为const类型

int func(int )const; // 为const类型的成员函数,只能调用类中const类型的变量;

另外,当类的实例是const类型时,也只能调用类中的const成员函数,且只有类的成员函数才能被修饰为const类型;

//Point.h
#include <iostream>
using namespace std;

class Point{
private:
    int x,y;

public:
    Point(int a,int b){
        x=a;y=b;
        cout<<"Point constructor is called !\n";
    };
    ~Point(){
    cout<<"Point destructor is called !\n";
    }
    
public:
    const int getX(){
        return x;
    }
    const int getY(){
        return y;
    }

public:
    void setX(const int a,int b) {
        x=a;y=b;
    }

public:
    void printPoint() const{
        cout<<"const type\n";
        cout<<"x="<<x<<",y="<<y<<endl;
    }
    void printPoint(){
        cout<<"non const type\n";
        cout<<"x="<<x<<",y="<<y<<endl;
    }
};
//main.cpp
#include <iostream>
#include "Point.h"
int main(int argc, const char * argv[])
{

    // insert code here...
    Point p(10,20);
    Point const p1(30,40);
    p1.printPoint();
    p.printPoint();
    //std::cout << "Hello, World!\n";
    return 0;
}

cout:

Point constructor is called !

Point constructor is called !

const type

x=30,y=40

not const type

x=10,y=20

Point destructor is called !

Point destructor is called !

Program ended with exit code: 0

将类中的

 void printPoint()

函数删除时则输出:

Point constructor is called !

Point constructor is called !

const type

x=30,y=40

const type

x=10,y=20

Point destructor is called !

Point destructor is called !

Program ended with exit code: 0

所以类中的非 const成员函数也可调用const类型成员函数。

时间: 2024-10-24 09:23:34

C++类中const一些用法的相关文章

C++类中const的用法

C++ 类中的const用法总结: 先看一个例子: class A { public: A(int x) : num(x), b(x) {} void fun(const A& a); //const修饰函数形参 int GetNum(void) const;//const修饰不修改成员变量的函数 void SetNum(int x); A& operator=(const A& other);  //const修改成员函数的返回值和形式参数 const A operator*(c

C#类中static变量用法分析

本文实例讲述了C#类中static变量用法.分享给大家供大家参考.具体分析如下: 先来看一段代码: 代码如下: using System; namespace Param { class Class1 { static int i = getNum(); int j = getNum(); static int num = 1; static int getNum() { return num; } [STAThread] static void Main(string[] args) { Co

C/C++中const的用法

const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结const的用法. 1.const位置 const位置较为灵活,一般来说,除了修饰一个类的成员函数外,const不会出现先一条语句的最后.示例如下: #include <iostream> using namespace std; int main(int argc,char* argv[]) {

C++中const关键字用法

为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函数:  类名::fun(形参) const 常数组:  类型说明符 const 数组名[大小] 常指针:  const 类型说明符* 指针名 ,类型

C++中const的用法

1.const修饰普通变量和指针 (1).const修饰普通变量 其写法有2种:a.const type value;   b.type const value; 这两种写法本质上是一样的.其含义是:const修饰的类型为type的变量value是不可变的. (2).const修饰指针 A.const char * value; B.char * const value; C.char const * value; D.const char* const value; 对于前3种,我们换种方式,

如何牢记C/C++中const的用法?

(下面以 typename 表示C/C++内某一类型 我常常会搞混 const 放在 typename* 的前面和后面的区别,今天特地查看了它们两个各自的含义,总结了一下: const typename* ptr 是指 ptr 是个指向常量的指针( pointer to constant data ),它认定所指向的内容是个常量,因此不能通过 *ptr 来改变它所指向的内容.比如说: 1 const int apple = 0; 2 const int* thirstyBoy = &apple;

ES6中const的用法

const声明一个只读的常量.一旦声明,常量的值就不能改变.且const一旦声明变量,就必须立即初始化,不能留到以后赋值. const的作用域与let命令相同:只在声明所在的块级作用域内有效. const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用.也与let一样不可重复声明. const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动. const如果引用的是一个对象,只能保证引用对象的这个指针不变,但对象本身的数据结构是可以改变的.如: co

C与C++中const区别

一.C中的const,功能比较单一,较容易理解. · 作用      : 被修饰的内容不可更改. · 使用场合: 修饰变量,函数参数,返回值等.(c++中应用场合要丰富的多) · 特点      : 是运行时const,因此不能取代#define用于成为数组长度等需要编译时常量的情况.同时因为是运行时const,可以只定义而不初始化,而在运行时初始化.如 const int iConst;. 另外,在c中,const变量默认是外部链接,因此在不同的编译单元中如果有同名const变量,会引发命名冲

类内const static(static const)成员变量初始化问题

在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许const static成员变量在类外初始化,这个应该是编译器遗留下的bug(你也可以说是要求严格). 在其他编译器下,整型以及枚举类型的const static成员变量是允许在声明的同时进行初始的,其中整型包括int.short.long.char等,非整型是指浮点型 包括float.double等.