sunrise_lk 2021-04-24 09:33 采纳率: 0%
浏览 28

将B类作为A类的静态成员变量,B类的成员变量为什么无法修改?

代码如下:

#include "test.h"
#include <iostream>

int main()
{
	std::cout << inclued_static_m::getStic().getValue1() << std::endl;	//输出value1的值 10

	inclued_static_m::getStic().setValue1(11);							//设置value1的值 11
	std::cout << inclued_static_m::getStic().getValue1() << std::endl;	//此处输出value1的值 仍然为10,为什么不是 11?
	return 0;
}
#pragma once

class static_m
{
public:
	static_m();
	~static_m();

	void setValue1(int a);
	int getValue1();

private:
	int value1;
};

static_m::static_m()
{
	value1 = 10;
}

static_m::~static_m()
{
}

inline void static_m::setValue1(int a)
{
	value1 = a;
}


inline int static_m::getValue1()
{
	return value1;
}


class inclued_static_m
{
public:
	inclued_static_m();
	~inclued_static_m();
	static static_m getStic();

private:
	static static_m m_SSSS;
};

static_m inclued_static_m::m_SSSS;
inclued_static_m::inclued_static_m()
{
}

inclued_static_m::~inclued_static_m()
{
}

inline static_m inclued_static_m::getStic()
{
	return m_SSSS;
}
  • 写回答

5条回答 默认 最新

  • 关注
    1. C++静态成员是类的行为而不是对象的行为
    2. C++静态成员的用途之一是统计有多少个对象实际存在
    3. 静态成员的初始化:在类的外面
      形式:
      数据类型类名::静态数据成员名=初值
    4. 赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。
    5. 赋值和初始化对于基本的数据类型差别不大
    6. 举个例子看初始化和赋值: 初始化的构造过程比较简单:先分配一个足够大的空间然后填充上数据:
      String::String( const char *init ) …{
      if( !init ) init = “”“”;
      s_ = new char[ strlen(init)+1 ];
      strcpy( s_, init );
      }
      析构过程更简单:
      String::~String() …{ delete [] s_; }

    但是如果赋值操作就复杂多了:
    String &String::operator =( const char *str ) …{

    if( !str ) str = “”“”;

    char *tmp = strcpy( new char[ strlen(str)+1 ], str ); // 多了中间变量

    delete [] s_; // 多了删除s_;
    s_ = tmp;  // 多一个赋值操作!现在是指向字符的指针,如果是个大对象,效率的差别可想而知.

    return *this;
    }
    7. Boost的assign库做了许多有益的工作。使用assign库,至少现在可以初始化了:

    评论

报告相同问题?

悬赏问题

  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥15 Android Navigation: 某XDirections类不能自动生成
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费