const常对象成员与常成员函数

#include <iostream>
#include <string>
using namespace std;
class pt{
public:
  pt(int a,int b){this->x=a,this->y=b;}
  int getX() const {return this->x;} //此处必须加const(关键),否则A.getX()将无法正常调用
  int getY() const {return this->y;} //因否则的话A.getX()中的this默认将指代read_only类型的A,从而导致出错
private:
  int x;
  int y;
};
class tang{
public:
  tang(int a,int b,int c,int d);
  void printInfo();
  void printInfo() const; //等价于void printInfo(const tang* this);
private: //常成员函数中必须使用常数据成员
  const pt A; //这两种写法都对
  pt const B;
};
tang::tang(int a,int b,int c,int d):A(a,b),B(c,d){
  cout<<"Done"<<endl;
}
void tang::printInfo(){
  cout<<"printInfo()"<<endl;
  cout<<‘<‘<<A.getX()<<‘,‘<<A.getY()<<‘>‘<<endl;
  cout<<‘<‘<<B.getX()<<‘,‘<<B.getY()<<‘>‘<<endl;
}
void tang::printInfo() const{
  cout<<"printInfo() const"<<endl;
  cout<<‘<‘<<A.getX()<<‘,‘<<A.getY()<<‘>‘<<endl;
  cout<<‘<‘<<B.getX()<<‘,‘<<B.getY()<<‘>‘<<endl;
}
int main(){
  tang p1(1,2,3,4);
  p1.printInfo();       //调用不带const的函数
  cout<<‘\n‘;
  const tang p2(5,6,7,8);
  p2.printInfo();      //调用带const的函数
}

原文地址:https://www.cnblogs.com/dart2100/p/8280572.html

时间: 2024-08-26 07:53:42

const常对象成员与常成员函数的相关文章

c++ 常成员函数 和 常对象

先明确几个概念: 1. 常对象只能调用常成员函数. 2. 普通对象可以调用全部成员函数. 3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针.4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针. 5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值:   在X类的const成员函数中,this指针的

c++常对象和常成员函数

常对象: 定义常对象的一般形式为: 类名 const 对象名[(实参表列)]; 也可以把const写在最左面: const 类名 对象名[(实参表列)]; 二者等价. 常对象的所有成员值都不能变,必须先初始化,不能调用非const成员函数 const成员函数: void get_time( ) const ; //将函数声明为const 不能改变类中的成员值们可以访问,若非要改变,可以把成员变量设置为mutable. const是函数类型的一部分,在声明函数和定义函数时都要有const关键字 不

C++ 常成员函数、常数据成员、常对象

常成员函数在声明和实现时都要带 const 关键字 常成员函数不能修改对象的数据成员,也不能访问类中没有用 const 声明的非常成员函数. 在任何函数中都不能对常数据成员赋值.对常数据成员初始化,只能通过构造函数的初始化列表. 常对象的数据成员在它的生存期内不会被改变,因此定义常对象时必须对其进行初始化.这里的初始化可以通过初始化列表完成,也可以通过构造函数函数体来完成. class Person { public: string name; Person() { name = "mollnn

【转】C++ const成员变量和成员函数(常成员函数)

转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击<C++初始化列表>回顾. const成员函数(常成员函数) const 成员函

类之静态成员以及常对象、常成员

一.静态成员:static修饰,每个类只有一份拷贝,为所有该类的对象所共用. 1.静态数据成员: 类内声明.类外初始化.和全局变量一样,在数据段里分配内存. eg: class A{ static int co; }; int A::co=0; 2.静态成员函数: 1).静态成员函数专门用来存取类的静态成员,不可访问非静态成员,没有this指针.由static在类内声明,可以在类外定义,此时不需要static作为前缀. eg: class A{ static int co; static int

C++ const成员变量、成员函数和对象

const成员变量 const成员变量和const普通变量用法相似.初始化const成员变量只有一种方法,就是通过构造函数的初始化列表. const成员函数 const成员函数可以使用类中的所有成员变量,但是不能修改它们的值. 注意:const成员函数需要在声明和定义的时候在函数头部的结尾加上const关键字 函数开头的const用来修饰函数的返回值,表示返回值是const类型,也就是不能被修改. 函数头部的结尾加上const表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值.

常函数和常对象的应用

#include <iostream> #include <string> using namespace std; class student { private: string name; int age; public: student(){} student(string name,int age) { this->name = name; this->age = age; } string getName() { return this->name; }

C++的类成员和类成员函数指针

类成员函数指针: 用于访问类成员函数,和一般函数指针有区别. 类成员函数处理的是类数据成员,声明类成员函数指针的同时,还要指出具体是哪个类的函数指针才可以.调用时也要通过对象调用. 而对于类的静态成员函数,它是类对象共享的,且只能处理静态数据成员,所以它的函数指针可以类似一般函数指针一样使用. 1 class Test 2 { 3 public: 4 void fun(int); 5 void fun(int) const; //重载函数,加一个const限制 6 static void fun

C++类中的static数据成员,static成员函数

C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!这句话可能比较拗口,其实可以这么理解:每个static数据成员可以看成是类的一个对象,而不与该类定义的对象有任何关系!下面我们就来具体看看类中的static数据成员! 谈到数据成员,我们最先想到的应该是怎么去定义一个static数据成

.NET中利用反射来实现自动映射两个对象中的数据成员

在以前的项目开发之中,经常会遇到这样一个问题:比如在外面项目的架构设计之中,我们采用MVC和EntityFramework来构建一个Web应用程序.比如我们采用常用的多层架构,例如有Presentation层.BusinessLogic层.DataAccess层等,各层之间是相对独立并且职责分明的.比如我们在Presentation层中会定义ViewModel,在DataAccess层中的DbContext部分又会由EntityFramework来自动生成StorageModel,或者叫做Dat